【发布时间】:2018-08-25 09:24:19
【问题描述】:
我有计划要构建某个程序,为此我需要一种方法来生成随机汇编代码并对其进行修改。
我知道如何使用system() 函数(C 语言),我想知道是否有办法创建一个只包含原始十六进制代码的文件,然后使用system() 在编译器中编译它像 NASM 一样转换成二进制可执行文件。
注意:不要回答,因为我要制作另一个页面来满足我的需求……这对我来说太笼统了。 (很抱歉给您带来不便...)
【问题讨论】:
-
... a file that contains only a raw hex code and then use system() to compile it in a compiler ...我认为我们不编译原始十六进制,但我们将汇编代码编译成十六进制 -
不...我认为我们将程序集编译成十六进制,然后编译成机器语言...您的计算机无法读取十六进制...
-
除非您正在为某些嵌入式系统编程或使用 Z80(或真正的旧系统),否则现代汇编程序通常会获取汇编文件并将其直接汇编成机器代码。或者它们组装成一个链接到最终可执行文件的目标文件。
-
我不确定有什么工具可以将文本“1234ABFE”转换为二进制 4 字节(但我很确定 GNU 世界有这样的工具可用),但如果你已经在C语言中,并且愿意使用
system来执行这样的工具,为什么不自己编写转换,就像4-liner ...并自己编写二进制文件。 (关于“16 位汇编命令” - 没关系,二进制文件包含分组为字节的位,即如果您使用 hexa 查看器检查输出文件,您将看到35 1D D5 C3 ...字节(或者如果您将切换显示到 WORD,然后你会看到你的)。 -
strtoul 将转换 ASCII base 16,或者上帝禁止你使用 *scanf()。以 16 为基数,转换起来有些简单,一个简单的查找表将用于每个半字节、移位和或、移位和或。
标签: assembly compilation hex nasm