4 ms·
Becoming skilled at GDB and knowing how to generate assembly listing from your tooling is a key skill that really helps with understanding. I learned assembly
by nerpderp82 3y ago
Becoming skilled at GDB and knowing how to generate assembly listing from your tooling is a key skill that really helps with understanding.
I learned assembly by reading the assembly listings from the C compiler. It is extremely interesting to be able internalize how high level constructs are compiled and optimized.
- BlackLotus89 3y agoThere was a reverse engineering guide that I quite liked that introduced you to assembly by first writing c examples, compiling them and then analyzing the disassembled output. It was quite a long guide, but I would recommend it to anyone starting out. I don't have it in my bookmarks it seems, but I will try to update my comment tomorrow when/if I find it. Edit: damn I guess it was https://beginners.re/ https://beginners.re/ before it became pay-walled. Web archive still has copies of the book, but if you like it you should consider buying it even if it means signing up for patreon m-( I still got a few versions of the book somewhere as well. Have to dive in again to see if it is as good as I remember
- circuit10 3y agohttps://godbolt.org/ https://godbolt.org/ is great for this
- harry8 3y agoDoing it locally is better, for mine. eg https://gitlab.com/hal88/junkcode/-/blob/master/c_template.c single file, chmod +x, compiles itself and executes the binary, can easily give the -S flag to gcc or clang (uncomment one line) or better yet run objdump on the binary. The great thing is it still works if you include a bunch of local headers that are a hassle to supply to godbolt. Latency locally is a win. The #if 0 trick for the compiler lines and #else for the code is a good one. Got it from Rusty Russell of iptables fame iirc. Write your script in C, why not?
- ykonstant 3y agoDamn, I have to sign up to see the code?
- deleted 3y ago[deleted]
- no_news_is 3y agoDo you have that set as private? Even logged in, I get: Page Not Found Make sure the address is correct and the page hasn't moved. Please contact your GitLab administrator if you think this is a mistake.
- claytonaalves 3y agoThis repo is private. Can u make it public ?
- harry8 3y agoI'm sorry, I thought it was public. Can't work out how to change it. Nuts. #if 0 //instructions to build and run THIS_FILE=$0 BIN_FILE=/tmp/$(basename $0) gcc -std=c11 -O0 -g -march=native $THIS_FILE -Wall -Wextra -o $BIN_FILE if [ $? -ne 0 ]; then echo "Bug in your C code or there is something wrong with your operating system's c compiler..." exit 1 fi # run it $BIN_FILE "$@" retval=$? # uncomment below to examine the generated machine code # # objdump -DC $BIN_FILE | less -p '<main>' # uncomment below to examine the assembly language the compier # thinks it is generating # # gcc -S -std=c11 -O0 -g -march=native $THIS_FILE -Wall -Wextra -o ${BIN_FILE}.s # vim ${BIN_FILE}.s # clean up rm $BIN_FILE exit $retval #else // c program #include <stdio.h> #include <stdint.h> int main(int argc, char **argv) { for(int i = 0; i != argc; ++i) { printf("argv[%d] = %s\n", i, argv[i]); } } #endif //end c program