581Fermer583
ExtendeDLe 24/01/2010 à 20:34
GDB se perd lors de l'appel des fonctions de l'OS, par exemple un "step" par dessus une fonction se comporte comme un next, et un finish depuis une fonction de l'OS retourne "Cannot find bounds of current function".

Aujourd'hui les fonctions sont définies comme des appels statiques avec des pointeurs de fonction : #define _oscall(rettype,funcname,...) (*((rettype __attribute__((cdecl)) (*)(__VA_ARGS__))(funcname##_##addr))) #define NULL ((void*)0) typedef struct{} FILE; typedef unsigned long size_t; #define fopen (_oscall(FILE*, fopen, const char * filename, const char * mode)) #define fwrite (_oscall(size_t, fwrite, const void * ptr, size_t size, size_t count, FILE * stream)) #define fclose (_oscall(int, fclose, FILE * stream)) #define malloc (_oscall(void*, malloc, size_t size)) #define free (_oscall(void, free, void * ptr)) #define memset (_oscall(void *, memset, void * ptr, int value, size_t num)) #define mkdir (_oscall(int, mkdir, const char *path, int mode)) #define fopen_addr 0x101850B8 #define fwrite_addr 0x101855A8 #define fclose_addr 0x10184AB0 #define malloc_addr 0x10181AD8 #define free_addr 0x10181ACC #define memset_addr 0x101860C4 #define mkdir_addr 0x102A8864

Il y aurait une subtilité pour que GCC fasse comprendre à GDB que c'est une fonction ? (attribute particulier ?)