This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
labs:disassembly [2017/03/22 14:10] manuelei |
labs:disassembly [2017/03/24 14:42] manuelei |
||
---|---|---|---|
Line 3: | Line 3: | ||
In this lab you learn how code and data are represented in memory and how to make low-level changes to a program in an assembly language. You will create modifications (mods) to a game. | In this lab you learn how code and data are represented in memory and how to make low-level changes to a program in an assembly language. You will create modifications (mods) to a game. | ||
- | ===== Exercises ===== | + | ===== Mount your home directory ===== |
+ | Use the following commands to connect to your remote home directory: | ||
- | * Download the ZIP file with the the material for this lab from http://www.disco.ethz.ch/lectures/ti2fp/exercises/disassembly.zip. Unpack it to some local folder. | + | * ''sudo apt install sshfs'' |
+ | * ''mkdir tardis-home/'' | ||
+ | * ''sshfs <yournethzlogin>@login.ee.ethz.ch: tardis-home/'' | ||
+ | |||
+ | Store all your files during this lab in a folder below tardis-home, so it is stored remotely in case your machine crashes. | ||
+ | |||
+ | ===== Exercises ===== | ||
+ | * 0) Download and unpack the ZIP file with the the material for this lab from http://www.disco.ethz.ch/lectures/ti2fp/exercises/disassembly.zip. | ||
* 1) Find the correct input to defuse the "bomb". | * 1) Find the correct input to defuse the "bomb". | ||
Line 14: | Line 22: | ||
===== Recommended Tools ===== | ===== Recommended Tools ===== | ||
- | |||
* Text editor: Geany | * Text editor: Geany | ||
* Hex editor: Bless | * Hex editor: Bless | ||
* Disassembler: objdump | * Disassembler: objdump | ||
+ | * Web assembler/disassembler: https://defuse.ca/online-x86-assembler.htm (Attention: Uses Intel syntax, which has arguments in different order than objdump.) | ||
* IA-32 cheat sheet (GNU format): http://www.cs.utsa.edu/~clark/cs3843/IA32cheatSheet.pdf | * IA-32 cheat sheet (GNU format): http://www.cs.utsa.edu/~clark/cs3843/IA32cheatSheet.pdf | ||
* Intel IA-32 instruction set reference: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf | * Intel IA-32 instruction set reference: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf | ||
- | * We have written a tool which allows you to insert your own machine code (produced e.g. with as) into SuperTuxKart. It is contained in the same zip folder as the other executables. \\ Usage: ./elf_tool <executable_file> <new_machine_code_file (inject_code.bin)> <insertion_address>. \\ The tool inserts the code into the executable, and writes a jump to the new code at the specified insertion_address (given in hexadecimal, e.g. 80487f0). Note that the inserted jump will **overwrite 6 bytes** of the code, so if the overwritten code is still needed, you have to repeat it in your new code. | + | ===== Hints for SuperTuxKart Modding ===== |
- | * Assembling: Write assembly in a file called inject_code.s and execute the following command to get the machine code binary file required for the elf_tool: as %%--%%32 -o inject_code.o inject_code.s && objcopy -O binary inject_code.o inject_code.bin && rm inject_code.o | + | * Some items and events slow karts down |