1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 == code
17
18
19
20
21
22
23
24 68/push "Integer"/imm32
25
26 e8/call abort/disp32
27
28 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
29
30 bb/copy . . . . . . . 0/imm32
31 b8/copy . . . . . . . 1/imm32/exit
32 cd/syscall 0x80/imm8
33
34
35
36
37
38 abort:
39
40
41 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none . . 4/disp8 .
42
43 e8/call error/disp32
44
45 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
46
47 bb/copy . . . . . . . 1/imm32
48 b8/copy . . . . . . . 1/imm32/exit
49 cd/syscall 0x80/imm8
50
51
52 error:
53
54
55 68/push "Error: "/imm32
56
57 e8/call write_stderr/disp32
58
59 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
60
61
62 ff 6/subop/push 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none . . 4/disp8 .
63
64 e8/call write_stderr/disp32
65
66 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
67
68
69 68/push " expected"/imm32
70
71 e8/call write_stderr/disp32
72
73 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
74
75
76 68/push Newline/imm32
77
78 e8/call write_stderr/disp32
79
80 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
81
82 c3/return
83
84
85
86
87 check_ints_equal:
88
89 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none . 0/r32/EAX 0xc/disp8 .
90 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none . 3/r32/EBX 0x8/disp8 .
91
92 39/compare 3/mod/direct 0/rm32/EAX . . . 3/r32/EBX . .
93 75/jump-if-unequal $check_ints_equal:else/disp8
94
95
96 68/push "."/imm32
97
98 e8/call write_stderr/disp32
99
100 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
101
102 c3/return
103
104 $check_ints_equal:else:
105
106 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/ESP 4/index/none . 1/r32/ECX 4/disp8 .
107
108
109 51/push-ECX
110
111 e8/call write_stderr/disp32
112
113 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
114
115
116 68/push Newline/imm32
117
118 e8/call write_stderr/disp32
119
120 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 4/imm32
121
122 c3/return
123
124
125
126 argv_equal:
127 +-- 58 lines: # --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
185 +--134 lines: # tests for argv_equal -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
319
320 write_stderr:
321
322 50/push-EAX
323 51/push-ECX
324 52/push-EDX
325 53/push-EBX
326
327
328 bb/copy . . . . . . . 2/imm32
329
330 8b/copy 1/mod/*+disp8 4/rm32/SIB 4/base/ESP 4/index/none . 1/r32/ECX 0x14/disp8 .
331 81 0/subop/add 3/mod/direct 1/rm32/ECX . . . . . 4/imm32
332
333 8b/copy 1/mod/*+disp8 4/rm32/SIB 4/base/ESP 4/index/none . 2/r32/EDX 0x14/disp8 .
334 8b/copy 0/mod/indirect 2/rm32/EDX . . . 2/r32/EDX . .
335
336 b8/copy . . . . . . . 4/imm32/write
337 cd/syscall 0x80/imm8
338
339 5b/pop-EBX
340 5a/pop-EDX
341 59/pop-ECX
342 58/pop-EAX
343
344 c3/return
345
346 write_stdout:
347
348 50/push-EAX
349 51/push-ECX
350 52/push-EDX
351 53/push-EBX
352
353
354 bb/copy . . . . . . . 1/imm32
355
356 8b/copy 1/mod/*+disp8 4/rm32/SIB 4/base/ESP 4/index/none . 1/r32/ECX 0x14/disp8 .
357 81 0/subop/add 3/mod/direct 1/rm32/ECX . . . . . 4/imm32
358
359 8b/copy 1/mod/*+disp8 4/rm32/SIB 4/base/ESP 4/index/none . 2/r32/EDX 0x14/disp8 .
360 8b/copy 0/mod/indirect 2/rm32/EDX . . . 2/r32/EDX . .
361
362 b8/copy . . . . . . . 4/imm32/write
363 cd/syscall 0x80/imm8
364
365 5b/pop-EBX
366 5a/pop-EDX
367 59/pop-ECX
368 58/pop-EAX
369
370 c3/return
371
372 == data
373 Newline:
374
375 01 00 00 00
376
377 0a/newline
378
379
380 Null_argv:
381 00/null
382 Abc_argv:
383 41/A 62/b 63/c 00/null
384
385