我得到了一些使用sprintf()
创建格式化字符串的汇编代码:
...
0x00304272: call 0x557b2 <dyld_stub___sprintf_chk>
...
我正在试图找出字符串的格式是如何格式化的,所以我找到了格式参数"%s%s"
,它存储在$ecx
寄存器中。现在,我不知道一个字符串的结束位置和下一个字符串的开头,所以我想将format参数更改为"%s@%s"
。
我尝试使用set $ecx = "%s@%s"
(根据print (char *) $ecx
似乎有效),但出于某种原因,sprintf()
使用旧格式字符串而不是新的。
我错过了什么吗?如何修改格式字符串?
答案 0 :(得分:1)
我试图使用set $ ecx =“%s @%s”
如果您处于32位模式(我假设您已经使用ecx
而不是rcx
),那么当您停在call ...sprintf
时, sprintf
的参数已被压入堆栈。
如果参数来自%ecx
,则需要在将值推入堆栈之前将新值重新分配给%ecx