c - 在c中编写跳转指令

标签 c assembly

首先,是的,这是一个从外部控制可执行文件的项目。不,我对此没有任何恶意,这个项目的最终结果无论如何也不会产生任何有用的东西。我是在 32 位 XP 安装上用 cygwin 编写的。

我需要做的是将COM文件的前几位更改为跳转指令,以便在执行时,它将跳转到COM文件的最末尾。我查看了汇编器手册来查找该命令的字节是什么,以便我可以用 C 对其进行硬编码,但没有运气。

第一个问题:我可以用 C 语言做到这一点吗?在我看来,我可以在任何 COM 文件的开头插入操作码,这样它就会执行它而不是 COM 文件。

第二个问题:有人知道我在哪里可以找到操作码资源,以便我可以将它们插入到我的文件中吗?或者,有谁知道跳转指令的字节是什么?

如果您对此内容的真实性有任何疑问,请随时询问。

最佳答案

Intel® 64 and IA-32 Architectures Software Developer Manual Volume 2A Instruction Set Reference解释了 JMP 指令的编码(实模式是 IA-32 的子集)。

对于 16 字节近跳转(在当前代码段内),您可以使用 0xE9 后跟要跳转到的相对偏移量。如果跳转是 COM 文件的第一个字节,则偏移量将相对于地址 0x103 - COM 文件的第一条指令始终加载在地址 0x100 处,并且该跳转是相对于 3 字节跳转之后的指令而言的。

关于c - 在c中编写跳转指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327013/

相关文章:

在函数内部声明的 C 自由变量

c - 降序堆排序

c - 匹配 JPEG 签名

c - 有和没有辅助变量的变量交换——哪个更快?

c - 将生成的程序集重写为 GCC 内联汇编

c - 定义具有文件范围的结构以供多个函数访问

c - 单个单元测试应该有多广泛?

linux - 汇编 - 为什么 strtol 破坏 %rcx 寄存器?

c++ - 汇编语法和平台之间的关系是什么

.net - native 代码、机器代码和汇编代码有什么区别?