5.3.17 · HinglishBuild Systems & Toolchain

Disassembly — objdump, reading assembly

1,804 words8 min readRead in English

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

Figure — Disassembly — objdump, reading assembly

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,rspKyun? Standard function prologue: old base pointer save karta hai aur locals ke liye ek stable reference frame establish karta hai.
  • mov [rbp-0x4], ediKyun? System V x86-64 calling convention arg 1 edi mein, arg 2 esi mein pass karta hai. -O0 par compiler inhe turant stack par spill kar deta hai.
  • add eax, edxKyun 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?
Ek object file/binary ke executable (.text) sections ko assembly mein disassemble karta hai.
-M intel flag kya change karta hai?
Output ko default AT&T syntax se Intel syntax mein switch karta hai (operand order dst, src; koi %/$ 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?
Address, raw machine-code bytes, mnemonic, operands.
x86 instructions variable length kyun hoti hain?
x86 CISC hai; encodings 1 byte se 15 tak hoti hain, prefixes ke saath (jaise REX 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?
Optimizer 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, rax usage explain karta hai.
  • Stack Frames & The Stack Pointer — prologue/epilogue push rbp/sub rsp.
  • Compiler Optimization Levels-O0 vs -O2 aur asm kya reveal karta hai.
  • Debugging with GDBdisassemble aur layout asm same decoding use karte hain.
  • ELF Object Files & Sections.text, .data, relocations jo -r dikhata hai.
  • CISC vs RISC — kyun x86 encodings variable length hoti hain.

Concept Map

compile aur assemble

ulta karta hai

produce karta hai

perform karta hai

controlled by

print karta hai

has

has

has

explain karta hai

used for

fault ko map karta hai

.c source humans ke liye

machine code bytes

assembly mnemonics

Disassembly

objdump -d

Intel vs AT&T syntax

disasm line chaar columns

address

raw bytes variable length

x86 CISC encoding

crashes aur optimizers debug karna