ida如何修改汇编指令不占用后面字节
本帖最后由 loukx1006 于 2022-2-10 21:58 编辑.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方法,但不知道怎么跳转
前面悬赏发错区了改不过来,如果知道的大佬可以转我那边悬赏帖子https://www.52pojie.cn/thread-1585693-1-1.html 好像还真不好改,从 mov r8d, ebx 这里开始写jmp跳转到别处去,改完以后再跳转到mov cs:qword_180047708, rax 侃遍天下无二人 发表于 2022-2-10 21:45
好像还真不好改,从 mov r8d, ebx 这里开始写jmp跳转到别处去,改完以后再跳转到mov cs:qword_1800 ...
大佬 x64的该怎么用jmp跳转地址 也是跳个0区写上要执行的代码 执行完了在跳回之前的位置 省字节一般用入栈出栈来实现,比如:
push 0ch
pop edx 本帖最后由 jixun66 于 2022-2-11 02:11 编辑
.text:00000001800187A7 E8 F4 18 00 00 call memset
把这个函数改成 CALL 你新找的空白区域(比如一堆 CC 的地方、代码段结束的地方扩容),然后空白区域可以填充:
call _my_memset
; 段尾或其他地方
_my_memset:
mov edx, 0xFF
jmp memset
jixun66 发表于 2022-2-11 02:09
.text:00000001800187A7 E8 F4 18 00 00 call memset
把这个函数改成 CALL ...
谢谢大佬,如果没一堆00的地方能自己加吗 loukx1006 发表于 2022-2-11 21:41
谢谢大佬,如果没一堆00的地方能自己加吗
可以自己加区段到 exe/dll 里
页:
[1]