Created
May 25, 2012 13:36
-
-
Save packz/2788213 to your computer and use it in GitHub Desktop.
GDB macro to patches easily binary (http://my.opera.com/taviso/blog/show.dml/248232)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define assemble | |
# dont enter routine again if user hits enter | |
dont-repeat | |
if ($argc) | |
if (*$arg0 = *$arg0) | |
# check if we have a valid address by dereferencing it, | |
# if we havnt, this will cause the routine to exit. | |
end | |
printf "Instructions will be written to %#x.\n", $arg0 | |
else | |
printf "Instructions will be written to stdout.\n" | |
end | |
printf "Type instructions, one per line.\n" | |
printf "End with a line saying just \"end\".\n" | |
if ($argc) | |
# argument specified, assemble instructions into memory | |
# at address specified. | |
shell nasm -f bin -o /dev/stdout /dev/stdin \ | |
<<< "$( echo "BITS 32"; while read -ep '>' r && test "$r" != end; \ | |
do echo -E "$r"; done )" | hexdump -ve \ | |
'1/1 "set *((unsigned char *) $arg0 + %#2_ax) = %#02x\n"' \ | |
> ~/.gdbassemble | |
# load the file containing set instructions | |
source ~/.gdbassemble | |
# all done. | |
shell rm -f ~/.gdbassemble | |
else | |
# no argument, assemble instructions to stdout | |
shell nasm -f bin -o /dev/stdout /dev/stdin \ | |
<<< "$( echo "BITS 32"; while read -ep '>' r && test "$r" != end; \ | |
do echo -E "$r"; done )" | ndisasm -i -b32 /dev/stdin | |
end | |
end | |
document assemble | |
Assemble instructions using nasm. | |
Type a line containing "end" to indicate the end. | |
If an address is specified, insert instructions at that address. | |
If no address is specified, assembled instructions are printed to stdout. | |
Use the pseudo instruction "org ADDR" to set the base address. | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment