Funkcja main w disassemblerze Ida

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1