GDB - 修改C字符串

时间:2011-11-19 00:29:48

标签: c assembly gdb

我得到了一些使用sprintf()创建格式化字符串的汇编代码:

...
0x00304272: call   0x557b2 <dyld_stub___sprintf_chk>
...

我正在试图找出字符串的格式是如何格式化的,所以我找到了格式参数"%s%s",它存储在$ecx寄存器中。现在,我不知道一个字符串的结束位置和下一个字符串的开头,所以我想将format参数更改为"%s@%s"

我尝试使用set $ecx = "%s@%s"(根据print (char *) $ecx似乎有效),但出于某种原因,sprintf()使用格式字符串而不是新的。

我错过了什么吗?如何修改格式字符串?

1 个答案:

答案 0 :(得分:1)

  

我试图使用set $ ecx =“%s @%s”

如果您处于32位模式(我假设您已经使用ecx而不是rcx),那么当您停在call ...sprintf时, sprintf的参数已被压入堆栈。

如果参数来自%ecx,则需要在将值推入堆栈之前将新值重新分配给%ecx