吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1300|回复: 0
收起左侧

[Android 讨论] Linux 关于 ptrace 断点查看寄存器的值

[复制链接]
yutao531315 发表于 2021-6-30 17:53
最近,闲来无聊,在深度研究, linux'  ptrace      
遇到一条指令
[Asm] 纯文本查看 复制代码
if ((hander.symaddr = lookup_symbol(&hander, hander.symname)) == 0) {		printf("Unable to find symbol: %s not found in executable\n",
				hander.symname);
		exit(-1);
	}
	// 关闭文件
	close(fd);
	// 创建一个子线程
	if ((pid = fork()) < 0) {
		perror("fork");
		exit(-1);
	}
	if (pid == 0) {
		// 子线程,附加进程 ,子线程
		if (ptrace(PTRACE_TRACEME, pid, NULL, NULL) < 0) {
			perror("PTRACE_TRACEME");
			exit(-1);
		}
		// 启动可执行文件
		execve(hander.exec, args, envp);
		exit(0);
	}
	// wait 调用后 ,就会这里阻塞,等待,fork 的子线程结束 ,  否则就一直阻塞在这里 ..
	wait(&status);

	printf("status  = %d\n",status);
	//拿到,函数地址
	printf("Beginning analysis of pid: %d  symaddr= %lx\n", pid, hander.symaddr);
	// 从内存中,读取 代码段内容
	//
	if ((orig = ptrace(PTRACE_PEEKTEXT, pid, hander.symaddr, NULL)) < 0) {
		perror("PTRACE_PEEKTEXT");
		exit(-1);
	}
	// 安装一个陷阱
	// prig 里面,保存着 相关的 指令机器码
	printf("orig  =%lx \n ",orig);
	// 产生一个异常
	trap = (orig & ~0xff) | 0xcc;
	printf("orig cc=%lx \n ",orig);



可以正确跟踪 比如 myprinf 函数,  入口地址 ,


并且可以 把函数的 机器码打印出来

其中疑惑的是  
trap = (orig & ~0xff) | 0xcc;  指令是不是可以理解为,把 指令替换为 0xcc 这里,产生一个异常
然而这条指令执行后 ,我在答应 trap的值 ,程序的机器码没有发生改变 ,这是什么原因导致的呢





发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 20:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表