pcsc-spy - A PC/SC spy command


pcsc-spy [-n|--nocolor] [-d|--diffable] [-h|--help] [fifo_filename]


pcsc-spy displays PC/SC calls of an application. It must be used with the library.

To be able to spy the PC/SC layer, the application flow must be modified so that all PC/SC calls are redirected. Two options are available:

- the application is linked with
- the application loads the library using dlopen(3)


-d, --diffable

Remove the variable parts (like handler values) from the output so that two execution can be more easily compared.

-h, --help

Display a short help text.

-n, --nocolor

Disable the output colorization (if you want redirect the output in a file for example).

-v, --version

Print the version of the pcsc-spy program plus a copyright, a list of authors.


Applications linked with

We will use the standard LD_PRELOAD loader option to load our spying library.


 LD_PRELOAD=/usr/lib/ pcsc_scan

Application loading

This is the case for the PC/SC wrappers like pyscard (for Python) and pcsc-perl (for Perl). The LD_PRELOAD mechanism can't be used. Instead we replace the library by the spying one.

You may use and to install and uninstall the spying library.

Using the spying library without pcsc-spy is not a problem but has side effects:

- a line " cannot open shared object file: No such file or directory" will be displayed

- some CPU time will be lost because of the PC/SC calls redirection

Starting the spy tool


If a command argument is passed we use it instead of the default ~/pcsc-spy FIFO file. It is then possible to record an execution log and use pcsc-spy multiple times on the same log.

To create the log file just do:

 mkfifo ~/pcsc-spy
 cat ~/pcsc-spy > logfile

and run your PC/SC application.

Mac OS X

The installation is not automatic. In the pcsc-lite/src/spy directory do:

 make framework

Then copy the PCSC.framework directory in /tmp

 cp -a PCSC.framework /tmp

Copy the official PCSC.framework (binary only) in /tmp

 cp /System/Library/Frameworks/PCSC.framework/PCSC /tmp

Run the application to debug as:

 DYLD_FRAMEWORK_PATH=/tmp pcsctest


~/pcsc-spy FIFO file is used by to send the raw log lines




This manual page was written by Ludovic Rousseau <>