Home
Categories
WIKI
Topic
User
LANGUAGE:
中文
English
有木有人一起玩调试器的
Experiences and Insight
1245
views ·
6
replies ·
To
floor
Go
vala2012
deepin
2012-11-06 11:47
Author
我是新手,刚学编程不久,有木有大神教我如何写这个东东的。
windows下面 实现调试器 .
通过两个函数:WaitForDebugEvent和ContinueDebugEvent
Linux 下的 调试器.
通过 PTRACE,听说这个函数还给内核造就过BUG,不知道是不是骗人的. 不过不可以用ptrace调试内核的init,能的话就悲剧了.
菜鸟感激。
上传编写调试器需要的最佳资料: Linux源码分析-PTRACE.doc
Linux系统调用与ptrace分析.pdf
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
pid_t child;
const int long_size = sizeof(long);
child = fork();
if (child == 0) // child fork.
{
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("./test.out", "test.out", NULL);
}
else
{
int status;
union u{
long val;
char chars[long_size];
}data;
struct user_regs_struct regs;
int start = 0;
long ins;
while (1)
{
puts("========================");
wait(&status);
if (WIFEXITED(status))
break;
ptrace(PTRACE_GETREGS, child, NULL, ®s); // 读取寄存器的值
///////////////////////////////////////////
if (start == 1)
{
// 从内存地址中读取一个字节, 内存地址由 addr给出.
ins = ptrace(PTRACE_PEEKTEXT, child, regs.eip, NULL);
printf("EIP:%lx Instruxction "
"executed: %lx\n",
regs.eip, ins);
}
////////////////////////////////////////////
if (regs.orig_eax == SYS_write) // 系统调用
{
start = 1;
// 设置单步执行标志.
ptrace(PTRACE_SINGLESTEP, child, NULL, NULL);
}
else
{
ptrace(PTRACE_SYSCALL, child, NULL, NULL);
}
}
}
return 0;
}
Copy the Code
GDB比较老的版本,但是思想已经非常完全.
可以完全看源码学习.代码比较少. 有一些文件我注释了意思.
src-gdb+2.51.tar.gz
arch/arm/include/asm/ptrace.h #define...
arch/x86/include/asm/ptrach.h 寄存器结构 保存点资料,下次好整理和看。
基于Intel Vt技术的Linux内核调试器:
http://www.lupaworld.com/space-uid-26540.html
Reply
Like 0
Favorite
View the author
All Replies
vala2012
deepin
2012-11-06 12:28
#1
QQ截图20121106044227.png
Reply
Like 0
View the author
cxbii
deepin
2012-11-06 21:00
#2
我还是乖乖玩python
还有你这图坑爹啊
Reply
Like 0
View the author
vala2012
deepin
2012-11-07 01:46
#3
我还是乖乖玩python
还有你这图坑爹啊
每次都看见 坛主累捧场,让我很感动,坛主~~ 哭
Reply
Like 0
View the author
cxbii
deepin
2012-11-07 02:10
#4
[quote]我还是乖乖玩python
还有你这图坑爹啊
每次都看见 坛主累捧场,让我很感动,坛主~~ 哭[/quote]
:
Reply
Like 0
View the author
moling2088
deepin
2012-11-09 03:18
#5
如此专业的问题,上专业编程论坛问问吧
Reply
Like 0
View the author
2048tb.com
deepin
2012-11-09 06:44
#6
我靠,都玩调试器的人了。
Reply
Like 0
View the author
Please
sign
in first
New Thread
Popular Events
More
windows下面 实现调试器 .
通过两个函数:WaitForDebugEvent和ContinueDebugEvent
Linux 下的 调试器.
通过 PTRACE,听说这个函数还给内核造就过BUG,不知道是不是骗人的. 不过不可以用ptrace调试内核的init,能的话就悲剧了.
菜鸟感激。
上传编写调试器需要的最佳资料: Linux源码分析-PTRACE.doc
Linux系统调用与ptrace分析.pdf
GDB比较老的版本,但是思想已经非常完全.
可以完全看源码学习.代码比较少. 有一些文件我注释了意思.
src-gdb+2.51.tar.gz
arch/arm/include/asm/ptrace.h #define...
arch/x86/include/asm/ptrach.h 寄存器结构 保存点资料,下次好整理和看。
基于Intel Vt技术的Linux内核调试器: http://www.lupaworld.com/space-uid-26540.html