LINUX.ORG.RU

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

Исправление SZT, (текущая версия) :

По частям же, в два push.

И как ты себе это представляешь?

teststack:     file format elf64-x86-64


Disassembly of section .text:

0000000000400080 <_start>:
  400080:	68 44 33 22 11       	pushq  $0x11223344
  400085:	68 44 33 22 11       	pushq  $0x11223344
...
после двух этих push-ей ожидаемый результат:
(gdb) print/x *((unsigned long long *)$rsp+1)
$1 = 0x11223344
(gdb) print/x *((unsigned long long *)$rsp+0)
$2 = 0x11223344
Оно записывает в стек с выравниванием под 64, старшие 32-битные кусочки оно просто зануляет. Можно конечно в регистр записать 64-битное значение и потом пушнуть, но зачем, если можно через регистр сразу call сделать

Исходная версия SZT, :

По частям же, в два push.

И как ты себе это представляешь?

teststack:     file format elf64-x86-64


Disassembly of section .text:

0000000000400080 <_start>:
  400080:	68 44 33 22 11       	pushq  $0x11223344
  400085:	68 44 33 22 11       	pushq  $0x11223344
...
после двух этих push-ей ожидаемый результат:
(gdb) print/x *((unsigned long long *)$rsp+1)
$1 = 0x11223344
(gdb) print/x *((unsigned long long *)$rsp+0)
$2 = 0x11223344
Оно записывает в стек с выравниванием под 64, старшие 32-битные кусочки оно просто зануляет