Я написал основную функцию с одной инструкцией добавления сборки.Согласно GDB, код:
(gdb) disass /r main
Dump of assembler code for function main:
0x00000000004004ed <+0>: 55 push %rbp
0x00000000004004ee <+1>: 48 89 e5 mov %rsp,%rbp
0x00000000004004f1 <+4>: 01 c1 add %eax,%ecx
0x00000000004004f3 <+6>: 5d pop %rbp
0x00000000004004f4 <+7>: c3 retq
End of assembler dump.
Когда я посмотрел IP и распечатал содержимое памяти после этого, я вижу
(gdb) x/10x $rip
0x4004f1 <main+4>: 0xc35dc101 0x1f0f2e66 0x00000084 0x41900000
0x400501 <__libc_csu_init+1>: 0xff894157 0x89495641 0x495541f6 0x5441d589
0x400511 <__libc_csu_init+17>: 0xf8258d4c 0x55002008
На самом деле, я хочу поставить свой add %eax, %ecx
только на одной странице и изолировать его до и после этого.Здесь у меня нет информации о страницах, и я не знаю, находятся ли add
и retq
на одной странице или нет.
Любой комментарий?
PS: Каквы можете увидеть c3
в 0xc35dc101
это инструкция retq
.Вопрос в том, каковы следующие байты?