Disassembly — objdump, reading assembly
5.3.17· Coding › Build Systems & Toolchain
Disassembly exist kyun karta hai?
Kyun zaroorat hai (80/20):
- Ek crash tumhe ek faulting address deta hai, C ki line nahi. Disassembly woh gap bridge karta hai.
- Optimizers tumhara code reorder/delete kar dete hain. Ek maatra ground truth emitted instructions hain.
- Security/reverse engineering: aksar tumhare paas koi source nahi hota, sirf binary hoti hai.
Poori pipeline:
Disassembly woh arrow .o ya executable se ulta chalata hai.
objdump ko invoke kaise karein
Do syntaxes kyun exist karti hain: historical reason hai. GNU default AT&T hai (mov %eax, %ebx ka matlab ebx = eax hai, src→dst, registers % se prefix, immediates $). Intel (mov ebx, eax ka matlab ebx = eax hai, dst←src) math assignment jaisa padhta hai. Hum Intel use karte hain kyunki yeh tumhare sochne ke tarike se match karta hai: dst = src.
Disassembly ki ek line kaisi dikhti hai

Ek single line mein chaar columns hote hain:
1149: 48 83 ec 08 sub rsp, 0x8
^addr ^raw bytes ^mnemonic ^operands
- address
1149: is instruction ka offset/virtual address. - raw bytes
48 83 ec 08: actual machine code (x86 par variable length). - mnemonic
sub: operation kya hai. - operands
rsp, 0x8: yeh kis par operate karta hai.
Ek real function scratch se padhna (DERIVATION)
Source:
int add(int a, int b) {
return a + b;
}Compile karo: gcc -O0 -g -c add.c phir objdump -d -M intel add.o:
0000000000000000 <add>:
0: 55 push rbp ; caller ka frame ptr save karo
1: 48 89 e5 mov rbp, rsp ; naya frame set up karo
4: 89 7d fc mov [rbp-0x4], edi ; arg a (edi) ko stack par spill karo
7: 89 75 f8 mov [rbp-0x8], esi ; arg b (esi) ko stack par spill karo
a: 8b 55 fc mov edx, [rbp-0x4] ; a load karo
d: 8b 45 f8 mov eax, [rbp-0x8] ; b load karo
10: 01 d0 add eax, edx ; eax = b + a
12: 5d pop rbp ; frame restore karo
13: c3 ret ; return karo (result eax mein)Line-by-line padh rahe hain — Yeh step kyun?
push rbp / mov rbp,rsp— Kyun? Standard function prologue: old base pointer save karta hai aur locals ke liye ek stable reference frame establish karta hai.mov [rbp-0x4], edi— Kyun? System V x86-64 calling convention arg 1edimein, arg 2esimein pass karta hai.-O0par compiler inhe turant stack par spill kar deta hai.add eax, edx— Kyun eax? Convention integers==rax/eax==mein return karti hai. To compiler result wahan arrange karta hai.ret— return address pop karta hai aur uspar jump karta hai.
Control flow: if/loops kaise dikhte hain
Common mistakes
Flashcards
objdump -d kya karta hai?
.text) sections ko assembly mein disassemble karta hai.-M intel flag kya change karta hai?
%/$ sigils nahi).Intel syntax mein mov rbp, rsp ka kya matlab hai?
rbp = rsp (destination pehle, source doosre).Ek objdump line ke 4 columns kya hain?
x86 instructions variable length kyun hoti hain?
48 = 64-bit operand).Integer return value kahan rakha jaata hai (System V x86-64)?
rax/eax mein.Pehle do integer args kaun se registers mein hote hain (System V x86-64)?
rdi (arg1) aur rsi (arg2); 32-bit views edi, esi.Standard function prologue kya hota hai?
push rbp phir mov rbp, rsp stack frame save/establish karne ke liye.cmp a, b actually kya karta hai?
a - b compute karta hai, result discard karta hai, lekin CPU flags set karta hai taaki baad ka conditional jump unhe use kar sake.add ki jagah lea eax, [rdi+rsi] kyun aata hai?
lea ke address arithmetic ko do registers ek instruction mein add karne ke liye reuse karta hai bina kisi flag side effects ke.C source ko assembly ke saath interleave karne wala flag kaun sa hai?
-S (binary ko -g debug info ke saath compile karna padta hai).objdump -d aur -D mein kya fark hai?
-d sirf executable sections disassemble karta hai; -D SABHI sections disassemble karta hai (data garbage instructions dikha sakta hai).Recall Feynman: ek 12-saal ke bacche ko samjhao
English mein likhi ek recipe (tumhara code) ek secret number-code mein convert hoti hai jo robot chef (CPU) samajhta hai. Ek baar numbers ban gaye, tum use padh nahi sakte. Disassembly ek decoder ring hai: woh numbers ko wapas "add", "jump", "copy" jaise chhote English-ish words mein convert karta hai taaki tum check kar sako robot wahi bana raha hai jo tum chahte the — pizza nahi jab tumne cake maanga tha. objdump woh decoder ring hai.
Connections
- Compilation Pipeline — disassembly assemble step ka reverse hai.
- Calling Conventions (System V x86-64) —
rdi,rsi,raxusage explain karta hai. - Stack Frames & The Stack Pointer — prologue/epilogue
push rbp/sub rsp. - Compiler Optimization Levels —
-O0vs-O2aur asm kya reveal karta hai. - Debugging with GDB —
disassembleaurlayout asmsame decoding use karte hain. - ELF Object Files & Sections —
.text,.data, relocations jo-rdikhata hai. - CISC vs RISC — kyun x86 encodings variable length hoti hain.