Assembly 程序集代码中%rsi的值

Assembly 程序集代码中%rsi的值,assembly,reverse-engineering,Assembly,Reverse Engineering,我正在研究二进制炸弹的一个修改版本,但我被困在%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 <+

我正在研究二进制炸弹的一个修改版本,但我被困在
%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
...
功能阶段2的汇编程序代码转储: =>0x00000000004011c7:sub$0x8,%rsp 0x00000000004011cb:cmp$0x3,%rdi//包含3个值 0x00000000004011cf:je 0x4011df//检查值是否等于三 0x00000000004011d1:callq 0x401bd7 0x00000000004011d6:mov$0xFFFFFFFFFFFFFF,%rax 0x00000000004011dd:jmp 0x401214 0x00000000004011df:不是%rsi ...
RSI包含函数的第二个参数。(第一个参数在RDI中。)


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

看起来像是阶段2的一个参数。因此在此阶段,
%rdi
将是检查输入数量(第一个寄存器),
%rsi
将保持什么值以对其执行NOT操作,
rax的值
?您提供的代码片段中没有任何内容可以确认或否认rdi可能是输入数量的某种类型的计数,但这不是常见用法。我可以看到它是数组中条目数的计数(由一个其他参数指向),但这里也没有证据支持这一点。rax的值在您提供给我们的整个代码中未定义。不能对rsi中可能存在的任何“值”执行NOT。请注意,prl显然回答了“汇编代码中%rsi的值”的问题。新问题不应附加到旧问题上。@copernicus1996:是的,最近一些其他炸弹问题的调用方将
sscanf
返回值作为第一个参数。例如