【问题标题】:Value of %rsi in assembly code汇编代码中 %rsi 的值
【发布时间】:2017-09-25 13:57:03
【问题描述】:

我正在研究二进制炸弹的修改版本,但我对%rsi 的值感到困惑。是否与第 5 行和将值移动到 rax 有关?

谢谢

Dump of assembler code for function phase_2:

=> 0x00000000004011c7 <+0>: sub    $0x8,%rsp
0x00000000004011cb <+4>:    cmp    $0x3,%rdi  //contains 3 values
0x00000000004011cf <+8>:    je     0x4011df <phase_2+24>  //check values if equal to three
0x00000000004011d1 <+10>:   callq  0x401bd7 <bomb_explosion>
0x00000000004011d6 <+15>:   mov    $0xffffffffffffffff,%rax
0x00000000004011dd <+22>:   jmp    0x401214 <phase_2+77>
0x00000000004011df <+24>:   not    %rsi
...

【问题讨论】:

  • 看起来像 phase_2 的参数。

标签: assembly reverse-engineering


【解决方案1】:

RSI 包含函数的第二个参数。 (第一个参数在 RDI 中。)

对于符合 System V ABI 的 x86-64 系统(Linux、OS X、大多数一般 UNIX;Windows uses a different calling convention),函数的前六个整数和指针参数位于 RDI、RSI、RDX、 RCX、R8 和 R9。浮点参数在 XMM (SSE) 寄存器中传递。

【讨论】:

  • 所以在这个阶段,%rdi 将检查输入的数量(第一个寄存器),%rsi 持有什么值来对其执行 NOT 操作,@987654325 的值@?
  • 您提供的代码片段中没有任何内容可以确认或否认 rdi 可能是某种类型的输入数计数,但这不是常见的用法。我可以看到它是数组中条目数的计数(由其他参数之一指向),但这里也没有证据支持这一点。在您提供给我们的代码中,rax 的值是未定义的。 NOT 可以对可能在 rsi 中的任何“值”执行。请注意,prl 显然已经回答了“汇编代码中 %rsi 的值”这个问题。新问题不应附加到旧问题。
  • @copernicus1996:是的,最近一些其他炸弹问题的调用者将sscanf 返回值作为第一个参数传递。例如stackoverflow.com/questions/46320479/…
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
相关资源
最近更新 更多