LINUX.ORG.RU

История изменений

Исправление 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 бита.