C300_007
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> main() { char ch; unsigned char j; char k; ch = 200; j = 200; k = 'a'; printf("문자형 변수 i의 값은 %d \n", ch); printf("문자형 변수 j의 값은 %u \n", j); printf("문자형 변수 k의 값은 %d \n", k); } | cs |
IDA - Layout Graph
IDA - Text View
movzx(move zero extend) - 데이터가 확장될 때 0으로 확장한다. (항상 양수)
movsx(move sign extend) - 데이터가 확장될 때 sign으로 확장한다.
200은 2진수로 1100 1000이다.
200이 char형으로 선언되었을 때 MSB(최상위 비트)가 1이므로 음수라고 생각한다.
따라서 2의 보수를 취하면 -56이 된다. 따라서 출력을 하면 -56이 출력된다.
200을 unsigned char 형태로 선언하면 MSB를 신경쓰지 않기 때문에 1100 1000을 양수인 데이터로 생각하여 출력한다.
pseudo code - 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> main() { char var_1; unsigned char j; char k; var_1 = 200; j = 200; k = 97; eax = var_1; printf(_Foramt, eax); ecx = j; printf(byte_40303C, ecx); edx = k; printf(byte_403058, edx); eax = 0; } | cs |
pseudo code - 최종 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> main() { char var_1; unsigned char j; char k; var_1 = 200; j = 200; k = 97; printf(_Foramt, var_1); printf(byte_40303C, j); printf(byte_403058, k); } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 009 (??) (0) | 2018.05.26 |
---|---|
ASM to C with IDA - 008 (0) | 2018.05.26 |
ASM to C with IDA - 006 (0) | 2018.05.25 |
ASM to C with IDA - 005 (0) | 2018.05.25 |
ASM to C with IDA - 004 (1) | 2018.05.25 |