注册 登录
编程论坛 汇编论坛

请问:如何更改代码段中的数据,内详。

hwbnet 发布于 2007-12-10 19:44, 1420 次点击
cmp dword ptr [ebx+16],60
jnz @F
;这里要实现上面的60改为200,请问如何实现。
@@:
ret
7 回复
#2
永夜的极光2007-12-10 19:53
方法1:
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这个数了,直接修改就好
#3
hwbnet2007-12-10 23:27
改成这样,结果可以编译,运行出错。
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
#4
永夜的极光2007-12-11 08:47
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位的程序,不能混着用的
#5
hwbnet2007-12-11 13:23
我写的是WIN32汇编,用AX传CS值更正后还是运行出错。
听说要将代码节改为可写,不知道怎样改。
#6
永夜的极光2007-12-11 13:43
Win32汇编我就不懂了
#7
无理取闹2007-12-11 16:39
/section:.text,RWE
在link后面加上上面的 就将代码段改成可读可写可执行

对于你那个问题 如果是改一个别人的程序可以用一些调试工具试试比如OllyDBG
#8
hwbnet2007-12-11 17:59
是我自己的程序中要这样做,不是改别人的程序。
添加连接属性后运行还是出错,请看下面的代码有什么问题。
方案一:
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