这是我的程序:
#include <stdio.h>
int main(){
int var=5;
if(var==5) printf("Accesso effettuato!");
else printf("Access denied");
}
我更改了操作代码...在此图像中的十六进制编辑中但是当我运行我的程序时出现分段错误。
您会遇到分段错误,因为操作码表示和由接下来的五个字节确定的83 05
指令。所以在这种情况下,指令是。所以你引用了一个无效的内存地址。ADD DWORD PTR [address],constant
address
constant
05 89 45 F4 75
ADD DWORD PTR [F4458905],75
原来的指令是:
83 F9 05 cmp ecx, 5
看起来您正试图将其更改为恒定的比较,例如:
83 05 05 cmp 5, 5 ; not what you think it is!
我怀疑这样的野兽是否存在,因为它的用处充其量是值得怀疑的。比较两个常数似乎是浪费硅。
您实际上将其更改为几乎可以肯定取消引用无效地址的指令)。
作为选项一,您可以用设置零位的一个替换该三个字节序列(因为向下检查几条指令是一条jnz
指令),并用足够的nop
操作填充它以使其大小相同。
或者,查找一个cmp ecx, ecx
语句(再次使用适当的nop
填充),以便您可以确定所有标志都设置正确。根据 GNU 汇编器,这是as
:
39 c9 cmp %ecx, %ecx
90 nop