#########################
use Test::More tests => 11;
sub BEGIN {
use_ok('Games::Hack::Patch::i686');
}
#########################
# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.
# not a real example, instruction would be longer.
# just testing if a NOP would be issued.
$bin=GetNOP(5,6, 'mov eax,$1');
is($bin, "\x90", "NOP");
$bin=GetNOP(5,10, 'mov eax,$1');
is($bin, "\xeb\x03", "Simply short jump");
$bin=GetNOP(5,11, 'fstps +20(%ebp)');
is($bin, "\xdf\xc0\xeb\x02", "Floating point store 1");
$bin=GetNOP(5,10, 'fstp +20(%ebp)');
is($bin, "\xdf\xc0\xeb\x01", "Floating point store 2");
$bin=GetNOP(5,10, 'fst +20(%ebp)');
is($bin, "\xeb\x03", "Floating point store without pop");
$bin=GetNOP(10,14, 'popl [esi]');
is($bin, "\x83\xc4\x04\x90", "Pop from stack");
$has_warned=0;
eval {
local %SIG;
$SIG{'__WARN__'} = sub { $has_warned++ };
$bin=GetNOP(5,10, 'xxx');
};
is($bin, undef, "Unknown instructions are not simply patched");
is($has_warned, 1, "Unknown instructions are warned about");
{ TODO: {
local $TODO="SIMD/MMX ops not done yet";
local %SIG;
$SIG{'__WARN__'} = sub { };
# is that an sse instruction?
$bin=GetNOP(5,10, 'psubsw');
is($bin, "", "SIMD/MMX op");
} }
ok("finished");