lyrong2008 发表于 2024-4-14 19:26

OD如何给指定地址赋字符串值

本帖最后由 lyrong2008 于 2024-4-15 19:19 编辑

edx=02B2BCA4, (UNICODE "D:\123\321\1\")

eax=02B2A6CC

如何修改02B2A6CC的值为(UNICODE "D:\123\321\1\")


这段看似简单的代码困扰了我几天了,对于字符串赋值,如何赋值给一个指定的地址呢?


如果赋值给寄存器,只需要mov eax,edx,但是是往eax=02B2A6CC里头赋值,eax的值仍旧是02B2A6CC。


希望贵论坛的大哥大姐帮帮忙哈!真心尝试了很久然后出错了!

lies2014 发表于 2024-4-14 20:16

本帖最后由 lies2014 于 2024-4-14 20:18 编辑

mov esi,edx    ;源地址
mov edi,eax    ;目的地址
mov ecx,0xE    ;字符串长度(含结尾的 00 00)
cld      
rep movsw      ;复制字符串(Unicode为双字节)

lies2014 发表于 2024-4-14 20:44

lyrong2008 发表于 2024-4-14 20:20
谢谢大哥,如果字符串长度是变动的,要怎么修改呢?

有计算字符串的办法吗?再辛苦下了!!!


00402BB0xor ecx,ecx               
00402BB2mov bx,word ptr ds:   
00402BB5inc ecx                     ;长度(含结尾的 00 00)
00402BB6add edx,0x2               ;单字节字符串改为1
00402BB9cmp bx,0x0                  
00402BBDjne 0x402BB2

WFXL 发表于 2024-4-14 19:40

edx=02B2BCA4, (UNICODE "D:\123\321\1\")
这里的02B2BCA4指向的是内存地址,定位到这个内存地址,修改内容即可。

lyrong2008 发表于 2024-4-14 19:43

WFXL 发表于 2024-4-14 19:40
edx=02B2BCA4, (UNICODE "D:\123\321\1\")
这里的02B2BCA4指向的是内存地址,定位到这个内存地址,修改内 ...

谢谢兄弟,我想应用mov等汇编指令修改,想在程序内部处理!{:1_893:}

WFXL 发表于 2024-4-14 20:00

mov eax,edx之后,02B2A6CC的内容不就变成了(UNICODE "D:\123\321\1\")了吗?

Panel 发表于 2024-4-14 20:09

lyrong2008 发表于 2024-4-14 19:43
谢谢兄弟,我想应用mov等汇编指令修改,想在程序内部处理!

你再mov字符串也是需要一段内存来放啊

lyrong2008 发表于 2024-4-14 20:13

Panel 发表于 2024-4-14 20:09
你再mov字符串也是需要一段内存来放啊

是的,但是如何让02B2A6CC这个内存的地址内容变成"D:\123\321\1\"呢?

希望帮忙解答下哈!

lyrong2008 发表于 2024-4-14 20:20

lies2014 发表于 2024-4-14 20:16
mov esi,edx    ;源地址
mov edi,eax    ;目的地址
mov ecx,0xD    ;字符串长度( ...
谢谢大哥,如果字符串长度是变动的,要怎么修改呢?

有计算字符串的办法吗?再辛苦下了!!!

比如 edx=02B2BCA4, (UNICODE "D:\123\321\1\xxx\xxx\xxx")

Panel 发表于 2024-4-14 20:33

lyrong2008 发表于 2024-4-14 20:13
是的,但是如何让02B2A6CC这个内存的地址内容变成"D:\123\321\1\"呢?

希望帮忙解答下哈!

写内存啊
页: [1] 2
查看完整版本: OD如何给指定地址赋字符串值