41 lines
746 B
Ruby
41 lines
746 B
Ruby
|
#!/usr/bin/env ruby
|
||
|
# This file is part of Metasm, the Ruby assembly manipulation suite
|
||
|
# Copyright (C) 2007 Yoann GUILLOT
|
||
|
#
|
||
|
# Licence is LGPL, see LICENCE in the top-level directory
|
||
|
|
||
|
|
||
|
#
|
||
|
# in this exemple we can write a shellcode using a C function
|
||
|
#
|
||
|
|
||
|
require 'metasm'
|
||
|
|
||
|
# load and decode the file
|
||
|
sc = Metasm::Shellcode.new(Metasm::Ia32.new)
|
||
|
sc.parse <<EOS
|
||
|
jmp c_func
|
||
|
|
||
|
some_func:
|
||
|
mov eax, 42
|
||
|
ret
|
||
|
EOS
|
||
|
|
||
|
cp = sc.cpu.new_cparser
|
||
|
cp.parse <<EOS
|
||
|
void some_func(void);
|
||
|
/* __declspec(naked) */ void c_func() {
|
||
|
int i;
|
||
|
for (i=0 ; i<10 ; ++i)
|
||
|
some_func();
|
||
|
}
|
||
|
EOS
|
||
|
asm = sc.cpu.new_ccompiler(cp, sc).compile
|
||
|
|
||
|
sc.parse asm
|
||
|
sc.assemble
|
||
|
|
||
|
sc.encode_file 'shellcode.raw'
|
||
|
|
||
|
puts Metasm::Shellcode.load_file('shellcode.raw', Metasm::Ia32.new).disassemble
|