Wrzucam przykładowe exeki od Gynvaela Coldwinda http://re.coldwind.pl/?vart=1 do Idy Pro Free i od razu disassembler przechodzi do funkcji _main.
Samodzielnie kompiluję moje pliki c (gcc app.c -o app) i wrzucam exe do Idy, która nie wykrywa main() tzn. _main.
Czy trzeba to jakoś inaczej kompilować?
0
0
Sproboj flagę -g w GCC to dodaje metadane debuggera
0
Flaga -g nie pomaga :(
0
wrzucam exe do Idy, która nie wykrywa main() tzn. _main
A co wykrywa? Prawdopodobnie to co widzisz to entry point exeka (punkt wejścia), którym wcale nie jest main, bo jeszcze przed main biblioteka standardowa C zazwyczaj wykonuje swój kod.
0
Zwyczajowo entrypoint nazywa się często "start", więc pewnie to widzisz.
To jest realny entrypoint pliku .exe, wygląda to (w bardzo dużym uproszczeniu :P. To co jest dokładnie zależy od kompilatora) mniej więcej tak:
int start() {
int argc;
// wypełnienie w jakiś sposób argc i argv, zależne od systemu ofc
char **argv = GetCommandLineArguments(&argc);
// rzeczy specyficzne dla kompilatora, ogólnie przygotowanie środowiska,
// konstruktory (w sensie __attribute__((constructor)) w .ctors) i analogiczne, statyczne rzeczy, etc
CompilerSpecificInit();
int returnCode = main(argc, argv); // faktyczne "wywołanie" main
return returnCode
}
Na niskim poziomie main wcale nie jest pierwszą rzeczą jaka sie wykonuje w programie.