我得到了一些汇编程序代码,它使用sprintf()
创建格式化的字符串。
...
0x00304272: call 0x557b2 <dyld_stub___sprintf_chk>
...
我试图找出字符串是如何被格式化的,所以我找到了格式参数"%s%s"
,它存储在$ecx
寄存器中。现在,我不知道一个字符串在哪里结束,下一个字符串在哪里开始,所以我想将格式参数更改为"%s@%s"
。
我尝试过使用set $ecx = "%s@%s"
(根据print (char *) $ecx
的说法,这似乎有效),但出于某种原因,sprintf()
使用旧的格式字符串而不是新的字符串。
我错过什么了吗?如何修改格式字符串?
发布于 2011-11-19 14:51:08
我尝试使用set $ecx = "%s@%s“
如果您处于32位模式(我假设您使用的是ecx
而不是rcx
),到您在call ...sprintf
上停止时,sprintf
的参数已经被填充到堆栈上。
如果参数来自%ecx
,则需要在将该值推送到堆栈之前重新为%ecx
分配新值。
https://stackoverflow.com/questions/8190861
复制相似问题