On 12/18/2012 8:01 AM, Anna Pavlova wrote:
> Hello Douglas and Anthony,
>
> sorry for late reply and cool, thanks you for helping me with gdb :-).
>
> Thanks to you help I was able to run with my loaded library in debug mode.
> Anyway, the crash (in the debug mode) looks as follows:
>
> Program received signal SIGSEGV, Segmentation fault.
> 0xd810b787 in ?? ()
>
> where 0xd810b787 is p11->C_Initialize (checked with printf("p11 = 0x%0x,
> p11->C_Initialize = 0x%0x\n", p11, p11->C_Initialize);)
>
> >OK, but is 0x5810b6fa in your module?
>
> This I am not completely sure about. But I don't really know how can I find
> out if this is in my module or not.
> I suspect that there is C_Initialize defined also somewhere else and the
> pkcs11-tool picks it from somewhere else and not from my library.
>
>
> >I will ask again, does your module define the C_GetFunctionList, and does it
> >return a valid function list?
>
> Yes it has - in the upper layer of the library I defined it as
>
> CK_DEFINE_FUNCTION(CK_RV, C_GetFunctionList)
> (
> CK_FUNCTION_LIST_PTR_PTR ppFunctionList // receives pointer to function
> list
> )
> {
> try
> {
> API_ENTRY();
> API_PARAM_PTR_EX("ppFunctionList", ppFunctionList);
>
> if (ppFunctionList == NULL)
> API_EXIT(CKR_ARGUMENTS_BAD);
>
> *ppFunctionList = &functionList;
>
> API_EXIT(CKR_OK);
> }
> catch(...)
> {
> TRACE_ERROR("Catching top-level exception", "");
> API_EXIT(CKR_FUNCTION_FAILED);
> }
> }
>
> And it should return a valid function list. In fact I have my own small test
> tool that uses dlopen(libname, RTLD_NOW) to open the library and GetFuncList
> = (C_GetFunctionListPtr)dlsym(lib,
> "C_GetFunctionList") to get the correct address of the functions.
The OpenSC ./common/libscdl.c uses dlopen(filename, RTLD_LAZY)
and dlsym(handle, symbol)
I suspect that it has something to do with how your module is linked,
and your use of RLTD_NOW vs RTLD_LAZY.
In the OpenSC ./src/pkcs11/Makefile.am has:
opensc_pkcs11_la_LDFLAGS = $(AM_LDFLAGS) \
-export-symbols "$(srcdir)/opensc-pkcs11.exports" \
-module -shared -avoid-version -no-undefined
Libtool uses the -module and -no-undefined to make sure that your module
will only reference symbols from itself and its dependent libraries,
and in effect does what RTLD_NOW would do, but does it when creating
the module rather then when it is being loaded.
>
> I believe this is the same thing as done with pkcs11-tool, but somehow it
> works in my small test tool, I can do C_Initialize and other pkcs11 functions
> and in pkcs11-tool it crashes.
>
> I have Ubuntu11.10, 32bit and the OpenSC version is very recent -
> opensc 0.12.1-1ubuntu1
> I took it from here: http://apt.gooze.eu/ubuntu/dists/oneiric/
Actually that is not that new but should work.
To get the most out of gdb, you need to compile and link with the -g option
It sounds like opensc is compiled with the -g but not your module.
You may also want to try the OpenSC-0.13.0
> The next release is tagged on the github OpenSC/OpenSC project,
> thanks to all of you for your contributions.
>
> Tarball and MSI installers can be found on github, sourceforge or the CI
> server:
> https://github.com/OpenSC/OpenSC/tags
> https://sourceforge.net/projects/opensc/files/OpenSC/
> https://opensc.fr/jenkins/
> The packages for the other OSs will be added.
>
>
> Cheers,
> Anna
>
>
> On Mon, Dec 17, 2012 at 8:59 PM, Douglas E. Engert <[email protected]
> <mailto:[email protected]>> wrote:
>
> gdb --args pkcs11-tool
>
>
--
Douglas E. Engert <[email protected]>
Argonne National Laboratory
9700 South Cass Avenue
Argonne, Illinois 60439
(630) 252-5444
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel