Selamat siang.
Hari ini kita akan melihat kode instruksi if, for, while, switchyang dibongkar yang ditulis dalam bahasa C.

Jika pernyataan
Instruksi ini cukup mudah dibedakan dalam bentuk dibongkar dari instruksi lainnya. Fitur yang membedakannya adalah instruksi lompat bersyarat tunggal je, jne, dan perintah lompat lainnya.


radare2. IDA PRO radare2 , radare2. IDA PRO.
IDA PRO


radare2

#include <stdio.h>
void main() {
int x = 1;
int y = 2;
if(x == y) {
printf("x = y\n");
}
else{
printf("x != y\n");
}
} gcc. gcc -m32 prog_if.c -o prog_if. -m32 , x86.
radare2, r2 prog_if. aaa main s main. pdf.
radare2

( int x; int y ), 1 var_ch ( x) 2 var10h ( y). (cmp) 1 2 (cmp edx, dword [var_10h]). . jne ( jump if noe equal) 0x000011e1. if ( VV radare2 IDA).

. . .
#include <stdio.h>
void main() {
int x = 0;
int y = 1;
int z = 2;
if(x == y) {
if(z == 0) {
printf("z = 0; x = y\n");
}
else{
printf("z = 0; x != y\n");
}
}
else {
if(z == 0) {
printf("z = zero and x != y.\n");
} else {
printf("z non-zero and x != y.\n");
}
}
}radare2


.
for
for : , , /. for .
#include <stdio.h>
void main() {
int x;
for(x = 0; x < 100; x++) {
printf("x = %d", x);
}
}radare2

1 - var_ch (x = 0)
2 - , jle. ( x 2, .)
3 - (printf)
4 - var_ch (++x)

while
while , - , . while for, . for, .
#include <stdio.h>
int func_1(int x);
int change_status();
int main() {
int status = 0;
while(status == 0) {
printf("int e = %d", func_1(5) );
status = change_status();
}
return 0;
}
int change_status() {
return 1;
}
int func_1(int x) {
int c;
int e;
int l;
c = 1 + 2;
e = x / 5;
l = 4 - 2;
return e;
}radare2

1 - var_4h (status = 0)
2 - , je. ( x 0, .)
3 - (func1, printf, change_status)

switch
switch : .
#include <stdio.h>
int main() {
int i = 3;
switch(i) {
case 1:
printf("CASE_1 i = %d", i+4);
break;
case 2:
printf("CASE_2 i = %d", i+9);
break;
case 3:
printf("CASE_3 i = %d", i+14);
break;
}
return 0;
}radare2

1 - var_4h (i = 3)
2 - (add, printf)
"case" , (cmp, je, jne) i case.



, ( ) , — switch if . , cmp je jne.
switch. case 4 .
#include <stdio.h>
int main() {
int i = 3;
switch(i) {
case 1:
printf("CASE_1 i = %d", i+4);
break;
case 2:
printf("CASE_2 i = %d", i+9);
break;
case 3:
printf("CASE_3 i = %d", i+14);
break;
case 4:
printf("CASE_3 i = %d", i+19);
break;
default:
break;
}
return 0;
}radare2


1 - var_4h (i = 3)
2 - (add, printf)
c if . .




Modus grafik adalah teman Anda dalam pembongkaran :)
Itu saja. Saya menyarankan Anda mencoba menulis program di C sendiri, mengkompilasi dan mempelajari kode yang dibongkar. Berlatih dan berlatih lagi!
Terima kasih atas perhatiannya. Jangan sakit