Keresés

Aktív témák

  • Jester01

    veterán

    válasz dabadab #90 üzenetére

    Nem, az csak véletlenül jó, mert alacsony szinten a C calling convention szerint a hívó és nem a hívott veszi le a paramétereket a verembõl. Induláskor a main mindenképp megkapja az említett 2 paramétert is (nézd meg debuggerrel). Szintén a calling convention miatt mûködik a void main is, ugyanis a visszatérési érték egy regiszterben van, amiben ígyis-úgyis lesz valami szemét.

    int main()
    {
    return 0;
    }

    $ gdb a.out
    (gdb) br *main
    Breakpoint 1 at 0x8048374: file t.c, line 2.
    (gdb) r
    Starting program: /var/tmp/a.out

    Breakpoint 1, main () at t.c:2
    2 {
    (gdb) x/x $esp+4
    0xbf9714d0: 0x00000001 Ez itt az argc
    (gdb) x/x $esp+8
    0xbf9714d4: 0xbf971544 Ez itt az argv
    (gdb) p *(char**)0xbf971544
    $1 = 0xbf971b47 ''/var/tmp/a.out'' Ez meg az argv[0], vagyis a prog neve

Aktív témák