我正在尝试使用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,®s); 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
VM上奇怪的程序延迟行为
需要用于Linux的文本到语音识别工具
ELF文件中的导入表在哪里?
替代valgrind(memcheck)在Linux上查找泄漏?
我总是喜欢检查这种情况下的Linux系统调用表 ,然后在这个页面获取更多细节。
事实是,对于sys_open , %edx不存储文件名的长度。 它存储文件权限 。
知道文件名长度的唯一方法是在检索文件名并将其传递给strlen()之后 ,这将返回字符串的大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。