C 函数参数具有特定值时中断

C 函数参数具有特定值时中断,c,gdb,C,Gdb,我有一个计划: #include <stdio.h> int main() { char *str = "Hello World"; printf("foo\n"); printf("bar\n"); printf("%s\n", str); return 0; } 下面是一个关于在条件上设置断点的链接: 如果没有调试符号,我认为您需要执行一些非常低级的操作,例如 (gdb) break printf if (*(char *)$rdi == 'b

我有一个计划:

#include <stdio.h>

int main()
{
  char *str = "Hello World";

   printf("foo\n");
   printf("bar\n");
   printf("%s\n", str);

   return 0;
}

下面是一个关于在条件上设置断点的链接:

如果没有调试符号,我认为您需要执行一些非常低级的操作,例如

(gdb) break printf if (*(char *)$rdi == 'b' && *(char *)(1+$rdi) == 'a' && *(char *)(2+$rdi) == 'r' )


请记住,某些系统会将printfbar\n更改为对putsbar\n的调用。

您是否试图在printf?PS内设置断点。程序编译时没有调试符号-如果您知道调试符号是什么,你没有在编译中得到它们……在你到达断点后,你到底打算做什么?威廉·普赛尔:嗯,我没有尝试,但听起来很有趣:霍斯蒂尔·福克:这只是一个简单的例子。说来话长:我有一个编译程序tcp服务器,但我没有源代码。我想解释一些协议信息。例如,我在tcpdump中看到如下内容:command.4441.3.5000.abc\0我知道:4441是我的进程PID,3是abc的长度,但我不知道什么是5000,所以我想反汇编二进制文件的某些部分。您应该从答案中的链接复制相关文本。否则,若那个链接像链接一样衰减了,你们的答案就没用了。谢谢你们的回答。这对我很有用。长一点的弦怎么样?我们可以使用strcmp进行字符串比较吗。。。如果strcmp$rdi,foobar==0???@y3ti是的,如果运行映像中有strcmp,则可以调用它。否则,您将得到一个错误,如警告:重新计算断点1的条件失败:当前上下文中没有符号strcmp。
(gdb) break printf if (*(char *)$rdi == 'b' && *(char *)(1+$rdi) == 'a' && *(char *)(2+$rdi) == 'r' )
(gdb) break printf if (((char *)$rdi)[0] == 'b' && ((char *)$rdi)[1] == 'a' && ((char *)$rdi)[2] == 'r' )