x86 - 有没有办法在 gdb 中操作零标志?

标签 x86 gdb reverse-engineering

我想对可执行文件进行逆向工程,并且在过程中我想由于 strcpy 函数而导致堆栈溢出。反汇编时,比较后有一个 jne,当为 false 时,代码继续执行退出函数,从而退出程序。如果为 true,则跳转并转到使用 strcpy 的自定义函数。我在想我必须操纵零标志以避免调用退出函数。我的想法正确吗?如果是,gdb 中有可以使用的技术吗?在此过程中感谢您

最佳答案

我认为这是关于 x86 的。您可以使用以下方法设置 EFLAGS 寄存器(其中包含 ZF):

(gdb) set $eflags = 0

这将清除所有实际可以清除的位,包括 ZF 位。如果您只想清除 ZF 标志,则可以使用其位值为 0x40 的事实:

(gdb) set $eflags = $eflags & ~0x40

info reg eflags 显示此类操作的效果。

关于x86 - 有没有办法在 gdb 中操作零标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54657389/

相关文章:

c - 堆栈溢出 : Have no idea what modify the last one byte of the overwritten return address

MySQL密码安全

cocoa - 如果我知道寄存器名称,如何简化内存读取

c - 修补二进制文件

Linux x86 : Where is the real mode address space mapped to in protected kernel mode?

x86 - 在哪里可以找到 x86 的汇编程序?

debugging - 这个 gdb 警告是什么意思?当我尝试转储核心文件的回溯时,我明白了

Linux 内核在用户空间进程中支持 live-core 选项

c - 在 8 位字段上使用 CMPXCHG 指令在任何方面都比在 32 位字段上更糟糕吗?

将CPU切换到用户模式和内核模式的汇编指令?