SysRec
System Call Recorder
guillaume.tello@orange.fr

Retour aux téléchargements
Back to download


Français
English
SysRec permet d'enregistrer la liste des appels système d'un programme.

Cela regroupe tous les appels au Gemdos, Bios, Xbios, VDI, AES et même la LineA.

On obtient en retour un fichier texte avec la liste des appels en clair.
SysRec allows you to record every system call that a program performs.

The calls can be Gemdos, Bios, Xbios, VDI, AES and even the LineA.

You get in return a text file with the list of the system calls with their names.


Exécution interactive


Vous pouvez lancer SYSREC.PRG directement et le programme vous pose toutes les questions nécessaires à son exécution.

Ci-contre, je demande:
  • l'exécution de M_PLAYER
  • sans ligne de commande
  • un buffer d'enregistrement de 500Ko
  • et la surveillance des appels VDI
  • Etc


Interactive execution


You can simply run SYSREC.PRG, it will ask you everything required to run properly.

On the left, SYSREC will:
  • run M_PLAYER
  • no commande line
  • 500 KB of record buffer
  • record VDI calls
  • Etc
Le fichier SYSREC.INF


Le mieux est d'enregistrer toutes les options dans un fichier texte. Par défaut, il s'appelle SYSREC.INF. Mais vous pouvez utiliser un autre nom et faire un drag'n'drop sur SYSREC pour qu'il soit pris en compte.

Ci-contre, je prépare le fichier avec les mêmes options que précédemment.

A chaque lancement, je n'aurai donc plus à les retaper.

Si le fichier INF ne contient pas tous les éléments, ceux qui manquent seront demandés de manière interactive.
The SYSREC.INF file


The best is to write everything once into a text file. Its default name is SYSREC.INF. But, you can rename it and use the drag'n'drop over SYSREC.PRG to use it.

On the left, the INF file is prepared with the same parameters as before.

At every run, I won't have to type it all again.

If the INF file doesn't contain every option, the missing ones will be asked interactively.
M_PLAYER utilise la VDI ?

Je lance donc l'exécution de SYSREC qui lance lui-même M_PLAYER. Je choisis une vidéo, la fait rejouer, et sors.

J'obtiens, sur le disque, ce fichier texte:
  • Chaque appel occupe une ligne
  • On indique que c'est un appel VDI
  • Le numéro de fonction apparait en décimal et hexadécimal
  • Le nom de fonction apparait en clair.
Oui, il y a bien des appels VDI... Mais servent-ils lors de l'affichage de l'animation?
Does M_PLAYER use VDI ?

I run SYSREC that runs M_PLAYER. I pick up a video, play it and quit the program.

On the disk, I get this text file:
  • Every call takes one line
  • the nature of a call is VDI
  • the function number is displayed both in decimal and hexadecimal
  • the function name is added
Yes, M_PLAYER uses the VDI... But really during the replay?
Enregistrement ciblé


Pour répondre à la question précédente, je modifie mon fichier INF en remplaçant s=I par s=A.

De ce fait, l'enregistrement des appels ne commencera que lorsque j'aurai utilisé la combinaison de touches Alt+HELP.

Je relance, charge une vidéo et appuie sur Alt+HELP juste avant le replay de l'animation. Je fais de même juste à la fin pour arrêter l'enregistrement.

On obtient le fichier ci-contre : seule la souris est gérée par la VDI, tout le reste de l'affichage se passe sans appel graphique au système. M_Player utilise donc bien ses propres routines graphiques.


Selective recording


To anwser the previous question, I modify the INF file replacing s=I with s=A.

This way, recording will only start when I press Alt+HELP.

I run SYREC again, load a video and press Alt+HELP just before the replay. I do the same just after the replay to stop recording.

I get the file on the left : only the mouse is managed by the VDI, every other display is done without system calls. So, M_Player uses its own graphic routines.
Fonctions spécifiques


Il est possible de limiter l'enregistrement à certaines fonctions.

Pour savoir quels appels aux événements sont faits par M_PLAYER, je modifie encore avec la ligne

r=A+20+21+22+23+24+25+26

afin de surveiller uniquement les appels à la librairie Events. Les autres appels AES seront ignorés.

En retour, j'obtiens le fichier suivant : seuls EVENT_MULTI est utilisé.

Note : la précision de numéros de fonctions n'est possible que dans le fichier INF, pas en mdoe interactif.


Specific functions



it is possible to taget some specific functions.

If I want to know what events are managed by M_PLAYER, I can change the line to

r=A+20+21+22+23+24+25+26

to record only the calls to the Event library. The other AES calls will be ignored.

Upon return, I get this text file : only EVENT_MULTI is used.

Note : specific functions can only be used through the INF file, not in interactive mode.
Lien avec un Debugger


Un exemple



Je cherche à savoir si M_PLAYER effectue des appels en superviseur.

Je change encore la ligne avec:

r=G+32X+38

pour surveillmer l'appel SUPER du GEMDOS et SUPEXEC du XBIOS.

J'obtiens en retour ce fichier texte : les deux sont utilisés.
>


Using a Debugger


An example



I want to know if M_PLAYER runs some code in supervisor mode.

Again, I modify the line with:

r=G+32X+38

to record every call to SUPER (GEMDOS) and SUPEXEC (XBIOS).

Upon return, I get this file : both are used.
Arrêt sur une fonction



Je veux pouvoir tracer la fonction exécutée par l'appel SUPEXEC. Dans ce cas je modifie la ligne ainsi:

r=X-38

Notez le signe "-" ! Cela déclenchera une instruction ILLEGAL à l'appel SUPEXEC et arrêtera le programme si je travaille sous un Debugger.


A break point



I want to trace the routine executed by SUPEXEC. So, I modify again the line with:

r=X-38

Spot the sign "-" ! This will execute the ILLEGAL instruction whenever a SUPEXEC call is encountered. This will stop the program exactly where I want to if I work with a Debugger.
L'instruction ILLEGAL

Je lance DEBUG.PRG dans lequel je charge SYSREC.PRG. Celui-ci lance à son tour M_PLAYER !

J'ai rapidement un arrêt pour instruction ILLEGAL.

J'ai programmé SYREC pour qu'il laisse dans A2 l'adresse de retour vers le programme appelant.

J'inspecte les instructions prédédant cette adresse et retrouve rapidement l'appel XBIOS 38 et l'instruction pea $012D2584 qui donne l'adresse de la routine superviseur que M_PLAYER va exécuter.
Back to the first menu

I run DEBUG.PRG ad load SYSREC.PRG. This last runs M_PLAYER !

Rapidely, the system stops because of the ILLEGAL instruction.

I programmed SYREC to get the return address into A2.

I inspect the codes just before this address and find the call to XBIOS 38 with the instruction pea $012D2584 that gives the exact address of the supervisor routine that M_PLAYER wants to run.
Tracer

A cette adresse (qui est dans la zone de code de M_PLAYER), je place un point d'arrêt. Je modifie le PC en lui ajoutant 2 pour sauter l'instruction illégale et je relance le programme. Il s'arrêtra exactement au début de la routine superviseur et me permettra de l'inspecter pas à pas.

Mais, on peut déjà voir que l'utilisation de l'adresse $5A0 et les codes de comparaison signalent une lecture du Cookie Jar.
Trace

At this address (included into M_PLAYER code space), I set a breakpoint. I have to increase the PC by 2 to jump over the ILLEGAL instruction and I can run the program again. it will stop at the first instruction of the supervisor routine that I'll be able to trace.

But yet, the usage of the address $5A0 and the long codes used show that this routine is a Cookie Jar parser.
Les Offset

Une dernière option : si j'ajoute la lettre "O", SYSREC enregistre également les offsets. C'est à dire le décalage des addresses de retour par rapport au début de la zone TEXT du programme surveillé.

Par exemple, l'appel à RSRC_LOAD se trouve à $A680 (= 42624) du début de la zone TEXT.

Cela veut dire à 42624+256=42880 octets de la basepage.

Ou bien à 42624+28 = 42652 octets du début du fichier PRG pour une éventuelle modification du code.

Note : cette option multiplie par trois la taille du buffer nécessaire !


The Offset

One last option :if I add the letter "O", SYSREC records the Offsets. They are the distance in bytes between the return address and the beginning of the TEXT zone of the spied program.

For example, the call to RSRC_LOAD is located at offset $A680 (= 42624) from the TEXT zone.

This means at 42624+256=42880 bytes from the basepage.

Or at 42624+28 = 42652 bytes from the beginning of the PRG file for an eventual modification.

Note : this option increases by a factor of three the size of the required buffer !
Download SYSREC ! The archive contains :
  • SYSREC.PRG executable
  • README.TXT English/Français doc
  • SYSREC.S source code
  • Examples


15 décembre 2007