A Collection of Code from CDA-4102: Computer Architecture.
A major topic in this course is: Unix Processes in C, so there is a YouTube tutorial playlist.
The book following this course is Computer Systems: A Programmer's Perspective, 3/E
- This book uses programming in C language for assignments.
Another good book for Computer Architecture is: Structured Computer Organization
- This book is more about hardware and does not include programming.
C Language Placeholders List and examples of usage.
- Remember that
scanf()is vulnerable to buffer overflow, to usefgets()instead, as discussed in the article. - Remember in C: DON'T FORGET TO CLEAR THAT INPUT BUFFER: Stack Overflow
C File Handling:
- Reference for C File Handling with examples.
- C File Handling examples.
- C Files from W3 Schools.
- C Program to Copy One File to Another File
Architecture References:
- x86_64 Reference Sheet: This is what I am Running
- X86_64 Register and Instruction Quick Start Wiki Page
- x86 Assembly/X86 Architecture
GDB Debugging:
- Harvard CS50 GDB Tutorial: A Great Introduction to GDB.
- Low Level Learning: An Excellent GDB Walkthrough Example.
- CppCon 2022 Back To Basics: Debugging Strategies and Intro to GDB.
- GDB MasterClass by Mike Shah.
- GDB Quick Reference Guide.
- Debugging With GDB 10th Edition HTML Web Reference Manual.
- Debugging With GDB 10th Edition Reference Manual PDF.
run # (short: r) # Start the program start # Synonymous to (b main && run). Puts temporary breakpoint at main() next # (short: n) # Next Line of Code / Step OVER: Goto Next Line & Execute current line nexti # Next Instruction: Goto Next Line of ASSEMBLY & Execute current line of ASM. list # (short: l) # List/Print 10 lines of code next to currently executing line of code step # (short: s) # Step INTO function call at current line stepi # Step a single assembly instruction finish # (short: fin) # Finish the execution of current function continue # (short: c) # Resume execution (After a breakpoint) refresh # (short: ref or Ctrl+l) # Repaint the interface quit # (short: q) # Quit break funcName # (short: b funcName) # Set breakpoint at function funcName b file::line # Set breakpoint at line in file delete # Delete all breakpoints delete breakpoint_no # Delete breakpoint breakpoint_no disable # Disable all breakpoints make binaryName # recompile binaryName (useful to test after 'p var = value' changes) layout type # Set the window layout ("src", "asm", "split", or "reg") tui reg type # Set the register window layout ("general", "float", "system", or "next") lay next # Cycle through the layouts of gdb tui disable # Disable TUI display mode. tui enable # Enable TUI display mode. tui reg # TUI command to control the register window. print var # (short: p) # Print the value of variable / object var p var = value # Force set value to the var (short for print) set variable expression # Set a variable to value, e.g. `set variable x=20` set (expression) # Works like set variable ptype expr # Detailed print of datatype of expr info locals # Variables in local scope info variables # Variables declared outside current scope info functions # Names and datatypes of all defined functions info registers # Dump integer registers to screen / View Register Values ar time of crash info all-registers # Dump all registers to screen info b # List all breakpoints whatis expr # Print datatype of expr backtrace # (short 'bt') # Print backtrace: Call stack history where # Same as backtrace shell cmd # Run shell command cmd from gdb prompt python gdb.execute(cmd) # Run a gdb command cmd from python prompt set print pretty on # Enable pretty printing (Put in ~/.gdbinit) $ gdb -c core.num # Examine the dumped core file from a SIGSEGV(shell command) break _exit # Breakpoint at exit of program watch var # Stop when var is modified watch -l foo # Watch foo location rwatch foo # Stop when foo is read watch foo if foo>10 # Watch foo conditionally command breakpoint_no # Run user listed commands when breakpoint is hit (End commands with 'end') file executable # Load the executable for debugging from inside gdb info # GDB Manual Pages # Examine Function: Used After Crashes like 'Segmentation Faults' x/nfu addr # x addr # x/ # Examine function: used to examine registers and see what address they point to # different output examples: x/x $eip # examine the value of eip in hexadecimal x/o $eip # examine the value of eip in octal x/u $eip # examine the value of eip in unsigned base-10 decimal x/t $eip # examine the value of eip in binary x/i $eip # examine the instruction x/i $pc # examine the instruction at the program counter (before the crash) x/2xb $eip # examine first 2 bytes in hexadecimal x/1xh $eip # gives the same amount of bytes but in one line ('h' stands for half-word which is a short (2 bytes)) x/x $esp # examine the value of esp in hexadecimal x/o $ebp # examine the value of ebp in octal x/u $eip # examine the value of eip in unsigned decimal Base-10 x/t $edi # examine the value of edi in binary print $eip # will make a variable for it and display the value and address x/2xw $1 # Needs Description... # Number Base / Radix: o : octal u : unsigned decimal t : binary x : hexadecimal # Sizes: g : giant (8 bytes) # 64-bit word: 8 bits per byte * 8 bytes w : word (4 bytes) # 32-bit word: 8 * 4 = 32 dw : double word (4 bytes) # 32-bit word: 8 * 4 = 32 h : half word (2 bytes) # 16-bit word: 8 * 2 = 16 b : byte (1 byte) # 1 byte = 8 bits # and and by the way gdb uses LITTLE ENDIAN format # so the bytes will be reversed for example: x/4xb $eip: 0x7c , 0x4f , 0x45 , 0x64 x/1xw $eip: 0x64454f7c