微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ptrace%edx对于sys_open不一致

我正在尝试使用ptrace从sys_open系统调用获取文件名。 我得到的文件path指针,我能够从该地址获得正确的数据,但是,我需要一种方法来知道有多less数据,即文件名的长度。 我认为这个价值应该是edx,但这似乎并不是这样的情况。 有什么想法吗?

orig_eax = ptrace(PTRACE_PEEKUSER,child,4 * ORIG_EAX,NULL); if(orig_eax == __NR_open){ ptrace(PTRACE_GETREGS,NULL,&regs); if(regs.eax > 0){ filepath = (char *)calloc((regs.edx+1),sizeof(char)); getdata(child,regs.ebx,filepath,regs.edx); printf("Open eax %ld ebx %ld ecx %ld filepath %sn",regs.eax,regs.ecx,filepath); free(filepath); } }

示例输出

Open eax 3 ebx 2953895 edx 438 filepath /etc/localtime Open eax 3 ebx 143028320 edx 384 filepath /var/log/vsftpd.log Open eax 4 ebx 2957879 edx 438 filepath /etc/nsswitch.conf Segmentation Fault

只是edx:

edx 438 edx 384 edx 438 //seg fault here edx -1217013808 edx 0 edx 143035796 edx 0 edx 0

在基于Linux的操作系统中有没有办法确定复制到X剪贴板的文本的来源?

如何让索尼Xperia ZR Android内核开发mkbootimg?

在Docker中限制可用的主机资源,不需要swarm

在Linux内核编译中将.o文件放在单独的文件夹中

VM上奇怪的程序延迟行为

需要用于Linux的文本到语音识别工具

ELF文件中的导入表在哪里?

在运行时获取Linux内核函数的结束地址

替代valgrind(memcheck)在Linux上查找泄漏?

UNIX:以相对path列出目录中的文件

我总是喜欢检查这种情况下的Linux系统调用表 ,然后在这页面获取更多细节。

事实是,对于sys_open , %edx不存储文件名的长度。 它存储文件权限 。

知道文件名长度的唯一方法是在检索文件名并将其传递给strlen()之后 ,这将返回字符串的大小。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐