Bonne journée.
Aujourd'hui, nous allons examiner le code d'instructions désassemblé if, for, while, switch
écrit en langage C.
Si déclaration
Cette instruction est assez facile à distinguer sous forme démontée des autres instructions. Sa caractéristique distinctive est les instructions de saut conditionnel uniques je, jne et autres commandes de saut.
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 . .
Le mode graphique est votre ami en démontage :)
C'est tout. Je vous recommande d'essayer d'écrire vous-même des programmes en C, de compiler et d'étudier le code désassemblé. Pratiquez et pratiquez à nouveau!
Merci pour l'attention. Ne sois pas malade.