好友
阅读权限10
听众
最后登录1970-1-1
|
25吾爱币
本帖最后由 loukx1006 于 2022-2-10 21:58 编辑
[Asm] 纯文本查看 复制代码 .text:0000000180018791 8B CB mov ecx, ebx ; Size
.text:0000000180018793 E8 58 16 00 00 call malloc
.text:0000000180018798 44 8B C3 mov r8d, ebx ; Size
.text:000000018001879B 31 D2 xor edx, edx ; Val
.text:000000018001879D 48 8B C8 mov rcx, rax ; void *
.text:00000001800187A0 48 89 05 61 EF 02 00 mov cs:qword_180047708, rax
.text:00000001800187A7 E8 F4 18 00 00 call memset
我想要把edx寄存器的值改掉,让memset不用0来初始化
但用 mov edx, 0Ch 会占用 5 个字节,导致后面的 memset 的第一个参数指针被覆盖掉,有没有办法不覆盖后面的 mov rcx, rax
有听说jmp方法,但不知道怎么跳转
|
最佳答案
查看完整内容
方法一:
如果edx原来的值只需要改动最后一个字节,改用mov dl, 0Ch,指令只占用两个字节
方法二:
1.找一段足够长的连续00或90的地址(假设为18001889B)
2.先将地址18001879B的指令改为jmp 18001889Bh(5个字节)
3.将地址18001879B的指令改为:
mov edx, 0Ch
mov rcx,rax(上面的jmp已将下一条指令位置占用,需要在这里补回来)
jmp 1800187A0h(跳回原处继续执行)
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|