请问:如何更改代码段中的数据,内详。
cmp dword ptr [ebx+16],60jnz @F
;这里要实现上面的60改为200,请问如何实现。
@@:
ret
cmp dword ptr [ebx+16],60换成cmp dword ptr [ebx+16],eax,每次到这里的时候设置eax的值
方法2:
cmp dword ptr [ebx+16],60这一句后面加一个标号,如:
value1:nop
然后把DS赋值为CS,偏移量为offset value1-4的位置就是60这个数了,直接修改就好 改成这样,结果可以编译,运行出错。
cmp dword ptr [ebx+16],60
@cs:
nop
nop
jnz @F
mov eax,offset @cs
push ds
mov ax,cs
mov ds,ax
mov DWORD ptr [eax-4],61
pop ds
@@:
ret DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,cs
mov ds,ax
mov ax,'A'
mov cx,26
l1:
mov dl,'A'
value1:
mov ah,02H
int 21H
inc al
mov bx,offset value1
mov [bx-1],al
loop l1
mov ah,4CH
int 21H
CODES ENDS
END START
这样可以运行,显示结果A~Z
你上面的程序,用了ax来改变ds,后面又用到了eax,这个时候eax已经不是offset @cs了
另外,你写的是16位还是32位的程序,不能混着用的 我写的是WIN32汇编,用AX传CS值更正后还是运行出错。
听说要将代码节改为可写,不知道怎样改。 Win32汇编我就不懂了 /section:.text,RWE
在link后面加上上面的 就将代码段改成可读可写可执行
对于你那个问题 如果是改一个别人的程序可以用一些调试工具试试比如OllyDBG 是我自己的程序中要这样做,不是改别人的程序。
添加连接属性后运行还是出错,请看下面的代码有什么问题。
方案一:
cmp dword ptr [ebx+16],60
@cs:
nop
nop
jnz @F
push ds
mov ax,cs
mov ds,ax
mov eax,offset @cs
mov DWORD ptr [eax-4],61
pop ds
@@:
ret
方案二:
cmp dword ptr [ebx+16],60
@cs:
nop
nop
jnz @F
mov eax,offset @cs
mov DWORD ptr cs:[eax-4],61
@@:
ret
页:
[1]
