吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1255|回复: 3
收起左侧

[经验求助] ida如何修改汇编指令不占用后面字节

[复制链接]
loukx1006 发表于 2022-2-10 21:00
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(跳回原处继续执行)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lies2014 发表于 2022-2-10 21:00
方法一:
如果edx原来的值只需要改动最后一个字节,改用mov dl, 0Ch,指令只占用两个字节
方法二:
1.找一段足够长的连续00或90的地址(假设为18001889B)
2.先将地址18001879B的指令改为jmp 18001889Bh(5个字节)
3.将地址18001879B的指令改为:
mov edx, 0Ch
mov rcx,rax(上面的jmp已将下一条指令位置占用,需要在这里补回来)
jmp 1800187A0h(跳回原处继续执行)
freelive 发表于 2022-2-10 22:52
https://bbs.pediy.com/thread-202212.htm

可以仔细看看大家的解答,前几天正好看到的这个问题。利用空白空间修改代码。
jmp 跳到程序空白的地址
jmp 下条语句

序空白的地址:
XXX
XXX
XXX
XXX
jmp 跳回jmp 下条语句
IBinary 发表于 2022-2-11 11:33
只能跳转了。至于怎么跳转我总结过了。你可以看看。 可以结贴了。哈哈哈。
https://www.cnblogs.com/iBinary/p/11334793.html   我的博客总结
返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表