Crash Dump

décembre 29th, 2006 at 04:42 admin

Yo, c’est nowel alors je poste un petit code avec lequel vous pourrez jouer
pendant les vacs. Vous le savez lorsque un programme sous Windows plante il
demande si vous voulez envoyer un rapport à MS. Mais c’est quoi ce rapport ffs
?! C’est tout simplement un Crash Dump de votre programme qui à planté, un
fichier qui contient des infos sur le process, ses threads, les dll loadées,
l’OS etc …

Pour avoir notre propre crash dump c’est simple, il suffit d’utiliser l’API
MiniDumpWriteDump() de Dbghelp.dll fournit avec les debugging tools de Windows
et dispo gratos sur leur site. Après c’est tout con, on dit au gestionnaire
d’exceptions de lancer notre fonction en cas d’exception non gérée (vous savez
le msg qui dit que votre prog à teplan) puis de crée le dump.

————CUT HERE——————–

#include 
#include 
#include 

//pour linker avec la lib
#pragma comment (lib, "Dbghelp.lib")

/* exception non gérée, on crée un dump */
LONG WINAPI UnhandledExceptionDump(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
HANDLE hFile;
_MINIDUMP_EXCEPTION_INFORMATION ExceptInfo;
hFile=CreateFile("C:ExceptDump.dmp",
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);

ExceptInfo.ThreadId=GetCurrentThreadId();
ExceptInfo.ExceptionPointers=ExceptionInfo;
ExceptInfo.ClientPointers=NULL;

MiniDumpWriteDump(GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal,
&ExceptInfo,
NULL,
NULL);

CloseHandle(hFile);
//termine le programme en affichant la msgbox 'le prog à teplan'
return EXCEPTION_CONTINUE_SEARCH;
}

int main(int argc, char *argv[])
{
// filtre les execpt non handlé
SetUnhandledExceptionFilter(UnhandledExceptionDump);

// exception
*((PBYTE)0)=1;

return 0;
}

————CUT HERE——————–

Now qu’on a le dump. Il suffit de l’analyser, avec Windbg par exemple
(Minidump est le nom de mon .exe)

0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************FAULTING_IP:
MiniDump+920
00400920 c6050000000001  mov     byte ptr ds:[0],1

EXCEPTION_RECORD:  ffffffff -- (.exr ffffffffffffffff)
ExceptionAddress: 00400920 (MiniDump+0x00000920)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 00000000
Attempt to write to address 00000000

DEFAULT_BUCKET_ID:  NULL_DEREFERENCE

PROCESS_NAME:  MiniDump.exe

ERROR_CODE: (NTSTATUS) 0xc0000005 - L'instruction   "0x%08lx" emploie l'adresse
mémoire "0x%08lx".
La mémoire ne peut pas  être "%s".

WRITE_ADDRESS:  00000000

BUGCHECK_STR:  ACCESS_VIOLATION

LAST_CONTROL_TRANSFER:  from 004009e6 to 00400920

STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0012ff80 004009e6 00000001 00510ed0 00510e30 MiniDump+0x920
0012ffc0 7c816fd7 00000018 00000000 7ffdf000 MiniDump+0x9e6
0012fff0 00000000 00400932 00000000 00000000 kernel32!BaseProcessStart+0x23

STACK_COMMAND:  ~0s; .ecxr ; kb

FAULTING_THREAD:  0000048c

FOLLOWUP_IP:
MiniDump+920
00400920 c6050000000001  mov     byte ptr ds:[0],1

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  MiniDump+920

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: MiniDump

IMAGE_NAME:  MiniDump.exe

DEBUG_FLR_IMAGE_TIMESTAMP:  458e997b

FAILURE_BUCKET_ID:  ACCESS_VIOLATION_MiniDump+920

BUCKET_ID:  ACCESS_VIOLATION_MiniDump+920

Followup: MachineOwner
---------

On a l’instruction ou a teplan le prog :
00400920 c6050000000001 mov byte ptr ds:[0],1
Après pour ceux qui ont pas Windbg j’ai trouvé un tool en surfant je vous le
donne :

http://www.debuginfo.com/tools/minidumpview.html

En fait il fonctionne avec l’API MiniDumpReadDumpStream() pour aller récup les
infos dans le fichier.
Tout est documenté sur le SDK, amusez vous bien.

Sur ce, bon noel à tous et vous bourrez pas trop la gueule :=]

Ivanlef0u

Entry Filed under: Non classé


Calendar

novembre 2024
L Ma Me J V S D
« fév    
 123
45678910
11121314151617
18192021222324
252627282930  

Most Recent Posts