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 <deeng...@anl.gov 
> <mailto:deeng...@anl.gov>> wrote:
>
>     gdb --args pkcs11-tool
>
>

-- 

  Douglas E. Engert  <deeng...@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444
_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to