Kérdés:
Hogyan lehet megkülönböztetni a fordító különböző kódjait az ASM-ben?
Lian
2017-01-12 20:47:59 UTC
view on stackexchange narkive permalink

Amíg egy futtatható fájlt megfordít az ollyval, ott van a fordító és a felhasználói kód. Tehát hogyan ismerem fel a fordító kódjait? Mondjuk, ha a futtatható fájl vizuális alap, akkor az első 2 utasításban van egy jmp és egy hívás, és a winmain később jön.

Egy válasz:
yellowbyte
2017-01-13 16:27:21 UTC
view on stackexchange narkive permalink

Csak meg kell határoznia a fő funkciót. Minden, ami a main-ból hívott, felhasználói kód. Ha azt szeretné ellenőrizni, hogy egy függvény része-e a felhasználói kódnak, rekurzív módon ellenőrizze az xref-et ettől a függvénytől kezdve, és nézze meg, hogy a végén-e a fő. Ami a main azonosítását illeti, az operációs rendszertől függ, hogy a futtatható fájl lefordított-e, és esetleg az adott fordító is. De a gcc által Linux alatt összeállított ELF fájlok esetében a main az utolsó érték, amelyet a __libc_start_main indításakor hívott meg.

igen, azt hiszem, ez az ida-ban is érvényes lenne, visszavezethető az xref-be. bármilyen ötlet, hogyan kell manuálisan csinálni ??
Biztos. Keresse meg az összes függvényt, amelyet a mainból hívnak. Minden alkalommal, amikor megtalál egy függvényt, vegye fel egy listára, majd keresse meg az adott függvényből meghívott összes funkciót. Tehát, ha egy funkció létezik ebben a listában, az azt jelenti, hogy része a felhasználói kódnak.
"Minden a főből hívott felhasználói kód"? Ez merész kijelentés. Nem csak a "main" -ba helyezheti a felhasználói hívásokat (még akkor is, ha csak egy alacsonynak a "printf (" Kérjük, adjon meg egy argumentumot ehhez a parancshoz \ n ");"), de lehetnek sablonhívások a "main" belsejében a globális inicializálásához. adatok, hívórendszer-karbantartási rutinok, vagy prológok és epilógusok stb.
Bocs, zavart vagyok, amit mondasz. Ha sablonhívásokat mond, akkor a függvénysablont jelenti? A függvénysablont a felhasználók deklarálhatják és definiálhatják. A globális adatok a felhasználói kód részét képezik. .Data vagy .bss szakaszba kerülnek, de hivatkoznak a felhasználói kódra. A rendszerkarbantartási rutinokat a fő jobb előtt hívják meg? A start funkcióban? És amikor prológokat / epilogusokat mondasz, akkor funkcionális prológokra és funkcionális epilógusokra gondolsz? Ez csak azt határozza meg, hogy a funkció hogyan állítsa be és tisztítsa meg önmagát. A felhasználó nem írja meg kifejezetten a prológokat és az epilógusokat, de csak a függvényeket állítják össze.
Elnézést, ha félreértettem a válaszát @Rad_Lexus.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...