История изменений
Исправление alman, (текущая версия) :
тут самый главный сатана - указатели, они занимают 64 бита вместо 32х.
Выше простенький пример, и вот во что он скомпилился.
0000000000400534 <main>:
400534: 55 push %rbp
400535: 48 89 e5 mov %rsp,%rbp
400538: b8 50 06 40 00 mov $0x400650,%eax
40053d: ba 08 00 00 00 mov $0x8,%edx
400542: be 04 00 00 00 mov $0x4,%esi
400547: 48 89 c7 mov %rax,%rdi
40054a: b8 00 00 00 00 mov $0x0,%eax
40054f: e8 dc fe ff ff callq 400430 <printf@plt>
400554: b8 00 00 00 00 mov $0x0,%eax
400559: c9 leaveq
40055a: c3 retq
40055b: 90 nop
40055c: 90 nop
40055d: 90 nop
40055e: 90 nop
40055f: 90 nop
Обратите внимание на адрес 400538: b8 50 06 40 00 mov $0x400650,%eax
Это адрес строки формата для функции printf. Таки не все указатели занимают 64 бита.
Исходная версия alman, :
тут самый главный сатана - указатели, они занимают 64 бита вместо 32х.
Выше простенький пример, и вот во что он скомпилился.
0000000000400534 <main>:
400534: 55 push %rbp
400535: 48 89 e5 mov %rsp,%rbp
400538: b8 50 06 40 00 mov $0x400650,%eax
40053d: ba 08 00 00 00 mov $0x8,%edx
400542: be 04 00 00 00 mov $0x4,%esi
400547: 48 89 c7 mov %rax,%rdi
40054a: b8 00 00 00 00 mov $0x0,%eax
40054f: e8 dc fe ff ff callq 400430 <printf@plt>
400554: b8 00 00 00 00 mov $0x0,%eax
400559: c9 leaveq
40055a: c3 retq
40055b: 90 nop
40055c: 90 nop
40055d: 90 nop
40055e: 90 nop
40055f: 90 nop
Обратите внимание на адрес 400538: b8 50 06 40 00 mov $0x400650,%eax
Это адрес строки формат для функции printf. Таки не все указатели занимают 64 бита.