Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何将机器语言命令直接写入ELF可执行文件_Assembly_Nasm_Elf_Machine Code_Machine Language - Fatal编程技术网

Assembly 如何将机器语言命令直接写入ELF可执行文件

Assembly 如何将机器语言命令直接写入ELF可执行文件,assembly,nasm,elf,machine-code,machine-language,Assembly,Nasm,Elf,Machine Code,Machine Language,我目前正在使用NASM获取一些汇编代码命令,生成一个.o文件,然后使用ld将其链接到ELF可执行文件。我的程序集文件ok.asm: section .text global _start ;must be declared for linker (ld) _start: ;tells linker entry point mov edx,len ;message length mov ecx,msg ;message to

我目前正在使用NASM获取一些汇编代码命令,生成一个.o文件,然后使用ld将其链接到ELF可执行文件。我的程序集文件ok.asm:

section .text
   global _start     ;must be declared for linker (ld)

_start:             ;tells linker entry point
   mov  edx,len     ;message length
   mov  ecx,msg     ;message to write
   mov  ebx,1       ;file descriptor (stdout)
   mov  eax,4       ;system call number (sys_write)
   int  0x80        ;call kernel

   mov  eax,1       ;system call number (sys_exit)
   int  0x80        ;call kernel

section .data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string
然后
nasm-f elf ok.asm
生成
ok.o

然后
ld-melf_1386-s-o yo ok.o
生成成品

问题是,我希望能够测试出纯机器语言(不一定是汇编语言),而不需要任何依赖项来构建和链接它,比如NASM和LD。我所能做的就是将纯字节写入(/generate)文件,因此我希望使用机器语言的纯命令(我可以处理这部分),并将其写入可执行的.ELF格式(我需要帮助的部分)

如果我对它进行对象转储,我可以对体系结构有一些了解。 首先
objdump-x./yo
(获取标题信息):

现在
objdump-s./yo
获取内容:

s yo

yo:     file format elf32-i386

Contents of section .text:
 8048080 ba0e0000 00b9a090 0408bb01 000000b8  ................
 8048090 04000000 cd80b801 000000cd 80        .............   
Contents of section .data:
 80490a0 48656c6c 6f2c2077 6f726c64 210a      Hello, world!.  
非常确定“.text”部分包含由上述命令生成的纯机器代码字节(例如,m
ov-edx、len
;等)

当我在JavaScript中逐字节读取它和字符串时,我得到了这个结果(360行,每个字节一行,第一行数字,然后是基数2中的字节,然后是字符码,然后是实际字符):

另外,一个简单的
hextump
命令会产生以下结果:

    hexdump -C -n 360 ./yo
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  80 80 04 08 34 00 00 00  |............4...|
00000020  c8 00 00 00 00 00 00 00  34 00 20 00 02 00 28 00  |........4. ...(.|
00000030  04 00 03 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000040  00 80 04 08 9d 00 00 00  9d 00 00 00 05 00 00 00  |................|
00000050  00 10 00 00 01 00 00 00  a0 00 00 00 a0 90 04 08  |................|
00000060  a0 90 04 08 0e 00 00 00  0e 00 00 00 06 00 00 00  |................|
00000070  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  ba 0e 00 00 00 b9 a0 90  04 08 bb 01 00 00 00 b8  |................|
00000090  04 00 00 00 cd 80 b8 01  00 00 00 cd 80 00 00 00  |................|
000000a0  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 0a 00 2e  |Hello, world!...|
000000b0  73 68 73 74 72 74 61 62  00 2e 74 65 78 74 00 2e  |shstrtab..text..|
000000c0  64 61 74 61 00 00 00 00  00 00 00 00 00 00 00 00  |data............|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000f0  0b 00 00 00 01 00 00 00  06 00 00 00 80 80 04 08  |................|
00000100  80 00 00 00 1d 00 00 00  00 00 00 00 00 00 00 00  |................|
00000110  10 00 00 00 00 00 00 00  11 00 00 00 01 00 00 00  |................|
00000120  03 00 00 00 a0 90 04 08  a0 00 00 00 0e 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  04 00 00 00 00 00 00 00  |................|
00000140  01 00 00 00 03 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  ae 00 00 00 17 00 00 00  00 00 00 00 00 00 00 00  |................|
00000160  01 00 00 00 00 00 00 00                           |........|
00000168
我也见过

还有这个

这张图很有用:

还有一个

问题是:

我怎样才能在不使用任何外部依赖项(如NASM、LD等)、仅使用纯二进制编写器的情况下,将纯机器语言命令列表直接“插入”到ELF文件格式中(可能使用基于上述内容的模板?)


我试图简单地将字符串“Hello,World!”更改为更长的字符串,但是(显然)它被截断了,因为长度只设置为特定的量,但是我不知道在二进制代码中的哪里可以找到长度属性,如果有人至少可以指向该属性,那么这将很有帮助

不是我,但这个问题相当长,而且是漫无边际的。我很容易看到有人认为它过于宽泛(如何从头开始编写自己的ELF可执行文件),或者是作为一个文档请求/缺乏研究工作(ELF格式可能在某个地方有文档记录,因此显而易见的第一步是查找文档,或者深入挖掘
objdump
的源代码,或者Linux内核的ELF程序加载程序函数,该函数在
execve()
二进制文件时解析这些数据。)请参阅关于如何构建ELF二进制文件的。要使二进制文件可执行,它需要一个有效的ELF头和至少一个程序头。不需要节头。我为Mecrisp Forth解释器做了类似的事情,在该解释器中,我开发了一个库,将程序状态转储到ELF二进制文件中。最后注意:机器代码由inst组成指令,而不是命令。请确保使用正确的术语。@PeterCordes好的,谢谢我读了那篇文章,它对了解ELF格式非常有帮助,谢谢“命令”和“指令”是一个任意的选择,但是世界已经确定了“指令”。任何一个英语单词都可以被选为讨论asm/机器代码/执行的商定术语,但实际选择的是“指令”。它用于缩写词,如IPC(每个时钟的指令)等。很方便,它以不同于“时钟”的字母开头.我想我听说过,对于一些较旧的体系结构,在供应商文档中或在开发人员社区中用于这些ISA的术语实际上是“command”。
000: 01111111, 127: \u007f
001: 01000101, 069: E
002: 01001100, 076: L
003: 01000110, 070: F
004: 00000001, 001: \u0001
005: 00000001, 001: \u0001
006: 00000001, 001: \u0001
007: 00000000, 000: \u0000
008: 00000000, 000: \u0000
009: 00000000, 000: \u0000
010: 00000000, 000: \u0000
011: 00000000, 000: \u0000
012: 00000000, 000: \u0000
013: 00000000, 000: \u0000
014: 00000000, 000: \u0000
015: 00000000, 000: \u0000
016: 00000010, 002: \u0002
017: 00000000, 000: \u0000
018: 00000011, 003: \u0003
019: 00000000, 000: \u0000
020: 00000001, 001: \u0001
021: 00000000, 000: \u0000
022: 00000000, 000: \u0000
023: 00000000, 000: \u0000
024: 10000000, 128: \u0080
025: 10000000, 128: \u0080
026: 00000100, 004: \u0004
027: 00001000, 008: \u0008
028: 00110100, 052: 4
029: 00000000, 000: \u0000
030: 00000000, 000: \u0000
031: 00000000, 000: \u0000
032: 11001000, 200: È
033: 00000000, 000: \u0000
034: 00000000, 000: \u0000
035: 00000000, 000: \u0000
036: 00000000, 000: \u0000
037: 00000000, 000: \u0000
038: 00000000, 000: \u0000
039: 00000000, 000: \u0000
040: 00110100, 052: 4
041: 00000000, 000: \u0000
042: 00100000, 032:
043: 00000000, 000: \u0000
044: 00000010, 002: \u0002
045: 00000000, 000: \u0000
046: 00101000, 040: (
047: 00000000, 000: \u0000
048: 00000100, 004: \u0004
049: 00000000, 000: \u0000
050: 00000011, 003: \u0003
051: 00000000, 000: \u0000
052: 00000001, 001: \u0001
053: 00000000, 000: \u0000
054: 00000000, 000: \u0000
055: 00000000, 000: \u0000
056: 00000000, 000: \u0000
057: 00000000, 000: \u0000
058: 00000000, 000: \u0000
059: 00000000, 000: \u0000
060: 00000000, 000: \u0000
061: 10000000, 128: \u0080
062: 00000100, 004: \u0004
063: 00001000, 008: \u0008
064: 00000000, 000: \u0000
065: 10000000, 128: \u0080
066: 00000100, 004: \u0004
067: 00001000, 008: \u0008
068: 10011101, 157: \u009d
069: 00000000, 000: \u0000
070: 00000000, 000: \u0000
071: 00000000, 000: \u0000
072: 10011101, 157: \u009d
073: 00000000, 000: \u0000
074: 00000000, 000: \u0000
075: 00000000, 000: \u0000
076: 00000101, 005: \u0005
077: 00000000, 000: \u0000
078: 00000000, 000: \u0000
079: 00000000, 000: \u0000
080: 00000000, 000: \u0000
081: 00010000, 016: \u0010
082: 00000000, 000: \u0000
083: 00000000, 000: \u0000
084: 00000001, 001: \u0001
085: 00000000, 000: \u0000
086: 00000000, 000: \u0000
087: 00000000, 000: \u0000
088: 10100000, 160:  
089: 00000000, 000: \u0000
090: 00000000, 000: \u0000
091: 00000000, 000: \u0000
092: 10100000, 160:  
093: 10010000, 144: \u0090
094: 00000100, 004: \u0004
095: 00001000, 008: \u0008
096: 10100000, 160:  
097: 10010000, 144: \u0090
098: 00000100, 004: \u0004
099: 00001000, 008: \u0008
100: 00001110, 014: \u000e
101: 00000000, 000: \u0000
102: 00000000, 000: \u0000
103: 00000000, 000: \u0000
104: 00001110, 014: \u000e
105: 00000000, 000: \u0000
106: 00000000, 000: \u0000
107: 00000000, 000: \u0000
108: 00000110, 006: \u0006
109: 00000000, 000: \u0000
110: 00000000, 000: \u0000
111: 00000000, 000: \u0000
112: 00000000, 000: \u0000
113: 00010000, 016: \u0010
114: 00000000, 000: \u0000
115: 00000000, 000: \u0000
116: 00000000, 000: \u0000
117: 00000000, 000: \u0000
118: 00000000, 000: \u0000
119: 00000000, 000: \u0000
120: 00000000, 000: \u0000
121: 00000000, 000: \u0000
122: 00000000, 000: \u0000
123: 00000000, 000: \u0000
124: 00000000, 000: \u0000
125: 00000000, 000: \u0000
126: 00000000, 000: \u0000
127: 00000000, 000: \u0000
128: 10111010, 186: º
129: 00001110, 014: \u000e
130: 00000000, 000: \u0000
131: 00000000, 000: \u0000
132: 00000000, 000: \u0000
133: 10111001, 185: ¹
134: 10100000, 160:  
135: 10010000, 144: \u0090
136: 00000100, 004: \u0004
137: 00001000, 008: \u0008
138: 10111011, 187: »
139: 00000001, 001: \u0001
140: 00000000, 000: \u0000
141: 00000000, 000: \u0000
142: 00000000, 000: \u0000
143: 10111000, 184: ¸
144: 00000100, 004: \u0004
145: 00000000, 000: \u0000
146: 00000000, 000: \u0000
147: 00000000, 000: \u0000
148: 11001101, 205: Í
149: 10000000, 128: \u0080
150: 10111000, 184: ¸
151: 00000001, 001: \u0001
152: 00000000, 000: \u0000
153: 00000000, 000: \u0000
154: 00000000, 000: \u0000
155: 11001101, 205: Í
156: 10000000, 128: \u0080
157: 00000000, 000: \u0000
158: 00000000, 000: \u0000
159: 00000000, 000: \u0000
160: 01001000, 072: H
161: 01100101, 101: e
162: 01101100, 108: l
163: 01101100, 108: l
164: 01101111, 111: o
165: 00101100, 044: ,
166: 00100000, 032:
167: 01110111, 119: w
168: 01101111, 111: o
169: 01110010, 114: r
170: 01101100, 108: l
171: 01100100, 100: d
172: 00100001, 033: !
173: 00001010, 010:
174: 00000000, 000: \u0000
175: 00101110, 046: .
176: 01110011, 115: s
177: 01101000, 104: h
178: 01110011, 115: s
179: 01110100, 116: t
180: 01110010, 114: r
181: 01110100, 116: t
182: 01100001, 097: a
183: 01100010, 098: b
184: 00000000, 000: \u0000
185: 00101110, 046: .
186: 01110100, 116: t
187: 01100101, 101: e
188: 01111000, 120: x
189: 01110100, 116: t
190: 00000000, 000: \u0000
191: 00101110, 046: .
192: 01100100, 100: d
193: 01100001, 097: a
194: 01110100, 116: t
195: 01100001, 097: a
196: 00000000, 000: \u0000
197: 00000000, 000: \u0000
198: 00000000, 000: \u0000
199: 00000000, 000: \u0000
200: 00000000, 000: \u0000
201: 00000000, 000: \u0000
202: 00000000, 000: \u0000
203: 00000000, 000: \u0000
204: 00000000, 000: \u0000
205: 00000000, 000: \u0000
206: 00000000, 000: \u0000
207: 00000000, 000: \u0000
208: 00000000, 000: \u0000
209: 00000000, 000: \u0000
210: 00000000, 000: \u0000
211: 00000000, 000: \u0000
212: 00000000, 000: \u0000
213: 00000000, 000: \u0000
214: 00000000, 000: \u0000
215: 00000000, 000: \u0000
216: 00000000, 000: \u0000
217: 00000000, 000: \u0000
218: 00000000, 000: \u0000
219: 00000000, 000: \u0000
220: 00000000, 000: \u0000
221: 00000000, 000: \u0000
222: 00000000, 000: \u0000
223: 00000000, 000: \u0000
224: 00000000, 000: \u0000
225: 00000000, 000: \u0000
226: 00000000, 000: \u0000
227: 00000000, 000: \u0000
228: 00000000, 000: \u0000
229: 00000000, 000: \u0000
230: 00000000, 000: \u0000
231: 00000000, 000: \u0000
232: 00000000, 000: \u0000
233: 00000000, 000: \u0000
234: 00000000, 000: \u0000
235: 00000000, 000: \u0000
236: 00000000, 000: \u0000
237: 00000000, 000: \u0000
238: 00000000, 000: \u0000
239: 00000000, 000: \u0000
240: 00001011, 011: \u000b
241: 00000000, 000: \u0000
242: 00000000, 000: \u0000
243: 00000000, 000: \u0000
244: 00000001, 001: \u0001
245: 00000000, 000: \u0000
246: 00000000, 000: \u0000
247: 00000000, 000: \u0000
248: 00000110, 006: \u0006
249: 00000000, 000: \u0000
250: 00000000, 000: \u0000
251: 00000000, 000: \u0000
252: 10000000, 128: \u0080
253: 10000000, 128: \u0080
254: 00000100, 004: \u0004
255: 00001000, 008: \u0008
256: 10000000, 128: \u0080
257: 00000000, 000: \u0000
258: 00000000, 000: \u0000
259: 00000000, 000: \u0000
260: 00011101, 029: \u001d
261: 00000000, 000: \u0000
262: 00000000, 000: \u0000
263: 00000000, 000: \u0000
264: 00000000, 000: \u0000
265: 00000000, 000: \u0000
266: 00000000, 000: \u0000
267: 00000000, 000: \u0000
268: 00000000, 000: \u0000
269: 00000000, 000: \u0000
270: 00000000, 000: \u0000
271: 00000000, 000: \u0000
272: 00010000, 016: \u0010
273: 00000000, 000: \u0000
274: 00000000, 000: \u0000
275: 00000000, 000: \u0000
276: 00000000, 000: \u0000
277: 00000000, 000: \u0000
278: 00000000, 000: \u0000
279: 00000000, 000: \u0000
280: 00010001, 017: \u0011
281: 00000000, 000: \u0000
282: 00000000, 000: \u0000
283: 00000000, 000: \u0000
284: 00000001, 001: \u0001
285: 00000000, 000: \u0000
286: 00000000, 000: \u0000
287: 00000000, 000: \u0000
288: 00000011, 003: \u0003
289: 00000000, 000: \u0000
290: 00000000, 000: \u0000
291: 00000000, 000: \u0000
292: 10100000, 160:  
293: 10010000, 144: \u0090
294: 00000100, 004: \u0004
295: 00001000, 008: \u0008
296: 10100000, 160:  
297: 00000000, 000: \u0000
298: 00000000, 000: \u0000
299: 00000000, 000: \u0000
300: 00001110, 014: \u000e
301: 00000000, 000: \u0000
302: 00000000, 000: \u0000
303: 00000000, 000: \u0000
304: 00000000, 000: \u0000
305: 00000000, 000: \u0000
306: 00000000, 000: \u0000
307: 00000000, 000: \u0000
308: 00000000, 000: \u0000
309: 00000000, 000: \u0000
310: 00000000, 000: \u0000
311: 00000000, 000: \u0000
312: 00000100, 004: \u0004
313: 00000000, 000: \u0000
314: 00000000, 000: \u0000
315: 00000000, 000: \u0000
316: 00000000, 000: \u0000
317: 00000000, 000: \u0000
318: 00000000, 000: \u0000
319: 00000000, 000: \u0000
320: 00000001, 001: \u0001
321: 00000000, 000: \u0000
322: 00000000, 000: \u0000
323: 00000000, 000: \u0000
324: 00000011, 003: \u0003
325: 00000000, 000: \u0000
326: 00000000, 000: \u0000
327: 00000000, 000: \u0000
328: 00000000, 000: \u0000
329: 00000000, 000: \u0000
330: 00000000, 000: \u0000
331: 00000000, 000: \u0000
332: 00000000, 000: \u0000
333: 00000000, 000: \u0000
334: 00000000, 000: \u0000
335: 00000000, 000: \u0000
336: 10101110, 174: ®
337: 00000000, 000: \u0000
338: 00000000, 000: \u0000
339: 00000000, 000: \u0000
340: 00010111, 023: \u0017
341: 00000000, 000: \u0000
342: 00000000, 000: \u0000
343: 00000000, 000: \u0000
344: 00000000, 000: \u0000
345: 00000000, 000: \u0000
346: 00000000, 000: \u0000
347: 00000000, 000: \u0000
348: 00000000, 000: \u0000
349: 00000000, 000: \u0000
350: 00000000, 000: \u0000
351: 00000000, 000: \u0000
352: 00000001, 001: \u0001
353: 00000000, 000: \u0000
354: 00000000, 000: \u0000
355: 00000000, 000: \u0000
356: 00000000, 000: \u0000
357: 00000000, 000: \u0000
358: 00000000, 000: \u0000
359: 00000000, 000: \u0000
    hexdump -C -n 360 ./yo
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  80 80 04 08 34 00 00 00  |............4...|
00000020  c8 00 00 00 00 00 00 00  34 00 20 00 02 00 28 00  |........4. ...(.|
00000030  04 00 03 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000040  00 80 04 08 9d 00 00 00  9d 00 00 00 05 00 00 00  |................|
00000050  00 10 00 00 01 00 00 00  a0 00 00 00 a0 90 04 08  |................|
00000060  a0 90 04 08 0e 00 00 00  0e 00 00 00 06 00 00 00  |................|
00000070  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080  ba 0e 00 00 00 b9 a0 90  04 08 bb 01 00 00 00 b8  |................|
00000090  04 00 00 00 cd 80 b8 01  00 00 00 cd 80 00 00 00  |................|
000000a0  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 0a 00 2e  |Hello, world!...|
000000b0  73 68 73 74 72 74 61 62  00 2e 74 65 78 74 00 2e  |shstrtab..text..|
000000c0  64 61 74 61 00 00 00 00  00 00 00 00 00 00 00 00  |data............|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000f0  0b 00 00 00 01 00 00 00  06 00 00 00 80 80 04 08  |................|
00000100  80 00 00 00 1d 00 00 00  00 00 00 00 00 00 00 00  |................|
00000110  10 00 00 00 00 00 00 00  11 00 00 00 01 00 00 00  |................|
00000120  03 00 00 00 a0 90 04 08  a0 00 00 00 0e 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  04 00 00 00 00 00 00 00  |................|
00000140  01 00 00 00 03 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  ae 00 00 00 17 00 00 00  00 00 00 00 00 00 00 00  |................|
00000160  01 00 00 00 00 00 00 00                           |........|
00000168