Contact polprog at Esper/DALnet/Libera for info
Name Last modified Size Description
Parent Directory -
loop.cpp 2018-03-06 22:21 522
simple.cpp 2018-02-28 19:15 659
labels.cpp 2018-02-28 19:15 700
x87-coprocessor.c 2018-02-28 19:15 795
readme.txt 2019-10-04 00:55 1.6K
Theese are some snippets from my adventures in learning x86_64 assembly.
Files:
simple.cpp
The simplest way of doing inline assembly. Compares a number from stdin
only the comparison part is implemented in assembly
labels.coo
Similar to above, but uses named tokens instead of cryptic %0, %1 etc
x87-coprocessor.c
Calculates the square root of 2 and 141 using the FPU. Once using float in C and once using a double
loop.cpp
Another simple snippet
Compilation:
g++ <filename.cpp>
or
gcc <filename.c>
Further messing around
You can (and should) run gdb and take a look "inside"
You may want to read /blog/ddd/ (which covers some gdb commands as well)
Start with
gdb a.out
you will see a prompt:
(gdb)
Some useful commands in this case
"run <args" and "cont" - run and continue. args optional
"layout asm" (short: "lay asm") - displays assembly window
"layout reg" ("lay reg") - displays registers
"where" - when you forget where you are (prints current program position)
"disas" - disassemble current function
"info registers", "info registers $eax", "p $eax" - print register values
"set $eax=123" - set register value.
"stepi" "nexti" - step 1 instruction. "nexti" skips function calls
"display [variable/register]" - keep track of value (examine, 'x' command takes
same args)
ex:
display/x $eax - keep printing eax value
display/20xb $esp - display 20 hexadecimal (x) bytes (b) starting from address in $esp
display $esp
display/2i $eip - display two instructions starting from the next one
etc.
breakpoints: "break *main+12" if you want to set a breakpoint at main+12 for example.
You can specify an address as well.
have fun