loukx1006 发表于 2022-2-10 21:26

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

侃遍天下无二人 发表于 2022-2-10 21:45

好像还真不好改,从 mov   r8d, ebx 这里开始写jmp跳转到别处去,改完以后再跳转到mov   cs:qword_180047708, rax

loukx1006 发表于 2022-2-10 22:04

侃遍天下无二人 发表于 2022-2-10 21:45
好像还真不好改,从 mov   r8d, ebx 这里开始写jmp跳转到别处去,改完以后再跳转到mov   cs:qword_1800 ...

大佬 x64的该怎么用jmp跳转地址

孤狼微博 发表于 2022-2-10 23:39

也是跳个0区写上要执行的代码 执行完了在跳回之前的位置

plauger 发表于 2022-2-11 00:46

省字节一般用入栈出栈来实现,比如:
push 0ch
pop edx

爱飞的猫 发表于 2022-2-11 02:09

本帖最后由 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

loukx1006 发表于 2022-2-11 21:41

jixun66 发表于 2022-2-11 02:09
.text:00000001800187A7 E8 F4 18 00 00                        call    memset

把这个函数改成 CALL ...

谢谢大佬,如果没一堆00的地方能自己加吗

爱飞的猫 发表于 2022-2-12 11:37

loukx1006 发表于 2022-2-11 21:41
谢谢大佬,如果没一堆00的地方能自己加吗

可以自己加区段到 exe/dll 里
页: [1]
查看完整版本: ida如何修改汇编指令不占用后面字节