gpt4 book ai didi

assembly - 检查内存访问 x86-64 程序集

转载 作者:行者123 更新时间:2023-12-04 16:48:51 26 4
gpt4 key购买 nike

我想限制对内存中特定区域的访问(读、写),我试图找出哪些指令可以访问通过 gcc 程序集 (gcc -S) 生成的内存。由于 x86-64 中的大多数指令都可以访问内存,在我目前的方法中,我正在检查指令中的括号。如果存在括号,我将检查访问的地址。

addq (rdi),rsi
movq (eax),ebx
movq ecx, eax

在上面的示例中,我假设第 1 条和第 2 条访问内存以及第 3 条指令没有。我的方法是否正确,是否检查括号是否涵盖所有内存访问,如果没有,是否有其他内存访问指令的列表。

最佳答案

除了@Jester 的comment提到的案例,有条件访问内存的指令,例如 CMOVcc。也不要忘记自修改代码。

检查生成的汇编列表可能是错误的方法。一种合适的方法是在指令级别动态执行二进制检测。只有在一条指令被执行之前,你才能知道这条指令是否要访问(读/写/两者)内存并采取相应的行动。您应该拦截每条指令。还有其他依赖于平台的方法,它们并不容易。例如,您可以实现一个在另一个进程中运行的简单调试器,并在指令读取和/或写入内存时中断。发生这种情况时,您可以检查指令和正在访问的地址并采取相应措施。 Linux 上的另一种方法是使用 mprotect当访问属于指定地址范围的内存位置时收到通知,并使用 sigaction 捕获信号.在信号处理程序中,您可以采取适当的操作。

关于assembly - 检查内存访问 x86-64 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com