我有一个程序从stdin获取输入,并从命令行获取一些参数.它看起来像这样:
Run Code Online (Sandbox Code Playgroud)cat input.txt > myprogram -path "/home/user/work"我尝试使用gcs在emacs中调试代码,通过Mx gdb,我尝试使用以下命令加载程序:
Run Code Online (Sandbox Code Playgroud)gdb cat input.txt > myprogram -path "/home/user/work"但是,gdb不喜欢它.
问题来自这里.不幸的是我不理解解决方案,并且不确定除了使用该-g选项进行编译并运行命令Mx gdb 之外还要做什么.
是我还是lldb for mac os x(替换gdb)不允许你将文件传递给stdin,供被调试的进程使用?
阅读说明没有参考.
我已经完成并安装了gnu gdb,但是想利用我认为改进的lldb功能?
我正在为学生开发缓冲区溢出练习。在这种情况下,您通常必须提供任意字节作为程序的输入(返回地址)。
假设这个例子:
#import <stdio.h>
#import <string.h>
void func() {
char buf[4];
gets(buf);
}
int main (int argc, char** argv) {
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常我会用 gdb 进行试验,直到找到一个解决方案,然后可以将其公式化为
python -c 'print "A"*8+"\x08\x04\88\72"' | ./program
Run Code Online (Sandbox Code Playgroud)
在开发越来越复杂的练习的同时,找到解决方案的难度也在增加。有时通过覆盖gdb中的返回地址
set {int}address_of_address = new_address
Run Code Online (Sandbox Code Playgroud)
有效,但 python 方法无效。调试它并能够在程序运行时在 gdb 中输入像“\x04”这样的字节会很好,分析效果。
有没有办法做到这一点?
这个问题似乎相关,但用 python 方法回答:从标准输入发送任意字节到 fgets
我的不止于此:-/