Fermer2
WarptenLe 28/08/2017 à 15:34
Un peu de contexte: je travaille sur une application quelconque qui s'unpack au demarrage, a coup d'injection de callbacks TLS, et d'exceptions SEH. (cheeky)

Sur un CPU de bureau classique (typiquement un 8086), il se passe quoi exactement en userland quand le CPU tombe sur hlt?
D'apres la doc, et ce que je comprend, la main est passee au kernel. Tant qu'un autre interrupt n'est pas execute, le programme est en pause.

Mais ca c'est si le programme est en ring 0. En userland, il se passe quoi? Une exception est generee? Je pars du principe que oui, puisque c'est ce qu'IDA me dit. Du coup, je pars dans les TIB pour trouver le handler d'exception. Sur IDA, ca se fait avec Ctrl+S, et on va dans TIB.

7HGXPTa.png

D'apres ce que je sais des SEH, on a plus ou moins une chaine de pointeurs, sauf qu'ici j'ai un pointeur vers 0x10000 en debut de chaine. (0x0FFFFFFFF marque la fin de la chaine d'exceptions). A ce pointeur 0x10000, je devrais avoir un autre pointeur. Sauf que j'ai un nullptr. Du coup, il se passe quoi? L'exception est ignoree, ou c'est cense crash si et seulement si un debuggeur est attache? A noter que je triche avec un breakpoint qui ecrase eax = 0 dans kernel32_IsDebuggerPresent...

[EDIT] de plus, un breakpoint place au debut de ntdll_NtContinue n'est jamais declenche (Cette fonction est appellee a la fin de chaque handler SEH)