GCC汇编和不支持的指令`mov'

时间:2016-10-12 14:13:11

标签: gcc assembly

我正在尝试在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寄存器
  • 返回

0 个答案:

没有答案