我正在尝试在level2.s
movl $0x0000000054756825, %rdi
movl $0x000000000040198c, $(0x0000000055685ff8) ; do I need $ for a memory address?
movl $0x0000000055685ff8, %rbp
retq
我正在64位机器上编译,它必须用64位编译。我找到了使用-m32
标志解决问题的各种解决方案,但我再次需要编译为64位
我收到以下错误消息:
level2.s: Assembler messages:
level2.s:1: Error: incorrect register `%rdi' used with `l' suffix
level2.s:2: Error: unsupported instruction `mov'
level2.s:3: Error: incorrect register `%rbp' used with `l' suffix
第1行和第3行的错误对我没有意义,因为r
寄存器是64位。第2行的错误对我来说毫无意义。
作为参考,这是缓冲区溢出攻击的一部分。我将这些指令放在堆栈上,在溢出返回地址空间后执行它们。
所以伪代码是:
rdi
寄存器作为参数text/code
区域)移动到堆栈中的某个位置stack
地址,而不是text/code
地址)上方的地址值移至rbp
寄存器