Sauf que cette fois ci, sur l'exécutable que je vise, j'ai des trucs bizarres.
Je récupère les addresses de début et de fin de quelques segments:
IMAGE_NT_HEADERS* ntHeader = ImageNtHeader(GetModuleHandle(NULL));
IMAGE_SECTION_HEADER* sectionHeader = IMAGE_FIRST_SECTION(ntHeader);
for (DWORD i = 0; i < ntHeader->FileHeader.NumberOfSections; ++i, ++sectionHeader)
{
if (memcmp((char*)sectionHeader->Name, ".text", 5) == 0)
{
StartTextAddress = sectionHeader->VirtualAddress + (DWORD)GetModuleHandle(NULL);
EndTextAddress = StartTextAddress + sectionHeader->Misc.VirtualSize;
}
else if (memcmp((char*)sectionHeader->Name, ".rdata", 6) == 0)
{
StartRdataAddress = sectionHeader->VirtualAddress + (DWORD)GetModuleHandle(NULL);
EndRdataAddress = StartRdataAddress + sectionHeader->Misc.VirtualSize;
}
else if (memcmp((char*)sectionHeader->Name, ".data", 5) == 0)
{
StartDataAddress = sectionHeader->VirtualAddress + (DWORD)GetModuleHandle(NULL);
EndDataAddress = StartRdataAddress + sectionHeader->Misc.VirtualSize;
}
}
Sauf que par exemple, pour le segment .text, ça me sort 0x401000 - 0xDEC6CC.
rdata? 0xDED000 - 0x1059879
data? 0x105A000 - 0x125C5CE0
Un petit tour sur IDA?

De toute évidence mon beau calcul pour la fin du segment ne fonctionne plus....
Je suis pas encore un dieu des api windows, mais là tout de suite quelqu'un a une idée? Je pourrais tricher en regardant le début du prochain segment mais il ne me semble pas qu'il y ait garantie que tous les segments se suivent sans discontinuité...
J'ai modifé l'exécutable cible pour virer l'ASLR (C'est chiant et ça me ralentit), pour le reste c'est du propre. Ce petit snippet fonctionne parfaitement pour une version plus ancienne, je suis un peu à l'ouest...
Je tourne sur du Windows 7
[EDIT] tiens je viens de remarquer que le bousin se cassait totalement la gueule sur .rdata .... Marrant.