diff --git a/elfwriter.c b/elfwriter.c index c4ec5e5..95ce6f9 100644 --- a/elfwriter.c +++ b/elfwriter.c @@ -277,7 +277,7 @@ main(int argc, const char *argv[]) } fclose(fd); - printf("Writing x86 ELF binary to %s...\n", argv[1]); + printf("Writing x86 ELF binary to %s...\n", argv[3]); result = elf_write(argv[3], code, code_size); if (result < 0) { printf("[error] elf_write failed.\n"); diff --git a/min.code b/min.code new file mode 100644 index 0000000..e128181 --- /dev/null +++ b/min.code @@ -0,0 +1 @@ +a=0 diff --git a/min2.asm b/min2.asm new file mode 100644 index 0000000..8238ae5 --- /dev/null +++ b/min2.asm @@ -0,0 +1,4 @@ +BITS 32 +mov ebx,eax +mov eax,1 +int 0x80 diff --git a/test.rb b/test.rb index 2ec4c4f..a004c9a 100644 --- a/test.rb +++ b/test.rb @@ -1,6 +1,11 @@ require 'compiler' require 'stringio' +X86_exit = [0x89, 0xc3, # mov ebx, eax (exit code) + 0xb8, 1, 0, 0, 0, # mov eax, 1 + 0xcd, 0x80 # int 0x80 + ].pack('c*') + def error(msg) STDERR.puts(msg) end def parse(input) @@ -33,7 +38,10 @@ def main(arg) template = File.read("template.asm") asm = interpolate(template, :data => data, :bss => bss, :code => code) File.open("test.asm", "w") { |f| f.puts(asm) } - File.open("test.bin", "wb") { |f| f.write(binary) } + File.open("test.bin", "wb") { |f| + f.write(binary) + f.write(X86_exit) + } end main(ARGV[0].to_s)