# include <stdio.h>
int f(int param1, int param2)
{
printf("test %d\n", param1+param2);
}
int main(void)
{
void (*newF)(int v1, int v2) = f;
__asm
{
push 20;
push 10;
call newF;
pop ebx;
pop ebx;
}
return 0;
}
'어셈블리' 카테고리의 다른 글
인라인 어셈블리 3개 값 받고 대소 비교 (0) | 2017.10.23 |
---|---|
이중 포인터 어셈블리 접근 방식 (0) | 2017.10.22 |
인라인 어셈블리 (0) | 2017.10.15 |
제곱 어셈블리 (0) | 2017.10.13 |
어셈블리 함수 공부 중 (0) | 2017.09.28 |
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=286482105
# include <stdio.h>
__declspec(naked) void main(void)
{
int sData;
int sumValue;
char* result;
char* s;
__asm
{ // stack prolog +++++++++++++++++++++++++++++++++++++
push ebp;
mov ebp, esp;
sub esp, 40h;
}
sData = 0; // esp += 4
result = "sum result : %d\n";
s = "%d";
sumValue = 0;
__asm
{ // stack body +++++++++++++++++++++++++++++++++++++++
lea edi, sData; //
push edi; // ( ,&sData);
push s; // ("%d", &sData);
call dword ptr[scanf]; // scanf("%d", &sData);
pop ebx;
pop ebx;
mov eax, sData;
mov ecx, eax;
L:// Label ++++++++++++++++++++++++++++++++++++++++++++
mov eax, ecx;
xor edx, edx; /* real import */
mov ebx, 2;
div ebx;
cmp edx, 0;
JZ jmpZero;
JNZ jmpNotZero;
jmpZero:
mov eax, ecx;
add sumValue, eax;
jmp EndPoint;
jmpNotZero:
jmp EndPoint;
EndPoint:
loop L;
push sumValue; // ( ,sumValue);
push result; // ("sum result : ",sumValue);
call dword ptr[printf]; // printf("sum result : ",sumValue);
}
__asm
{ // stack epilog +++++++++++++++++++++++++++++++++++++
mov esp, ebp;
pop ebp;
retn;
}
}
'어셈블리' 카테고리의 다른 글
이중 포인터 어셈블리 접근 방식 (0) | 2017.10.22 |
---|---|
인라이 어셈블리 (0) | 2017.10.15 |
제곱 어셈블리 (0) | 2017.10.13 |
어셈블리 함수 공부 중 (0) | 2017.09.28 |
배열 어셈블리 (0) | 2017.09.28 |
# include <stdio.h>
int __pow__(int nParam)
{
__asm
{
mov eax, dword ptr ss : [ebp + 0x8];
mul eax; // eax *= eax
leave;
retn;
}
} // end of __pow__ function
__declspec(naked) void main(void)
{
int num;
int resultValue;
char* prompt_1;
char* prompt_2;
char* prompt_3;
__asm
{
// [stack prolog ...]
push ebp;
mov ebp, esp; // ebp = esp
sub esp, 38h; // esp -= 38h
}
prompt_2 = "%d"; // esp 이동
prompt_1 = "Integer Input : "; // esp 이동
prompt_3 = "pow(%d) result =>(%d) \n";
resultValue = 0;
__asm
{
// [stack body ...]
push prompt_1; // ("Integer Input : ");
call dword ptr[printf]; // printf("Integer Input : ");
pop ebx;
lea edi, num;
push edi; // ( ,&num)
push prompt_2; // ("%d", &num);
call dword ptr[scanf]; // scanf("%d", &num);
pop ebx;
pop ebx;
push num; //
call dword ptr[__pow__];
mov resultValue, eax;
pop ebx;
push resultValue; // ( , , resultValue);
push num; // ( , num , resultValue);
push prompt_3; // ( "pow(%d) result =>(%d) \n" , num , resultValue);
call dword ptr[printf];
pop ebx;
pop ebx;
pop ebx;
}
__asm
{
// [stack epilog ...]
mov esp, ebp;
pop ebp;
ret;
}
}
'어셈블리' 카테고리의 다른 글
인라이 어셈블리 (0) | 2017.10.15 |
---|---|
인라인 어셈블리 (0) | 2017.10.15 |
어셈블리 함수 공부 중 (0) | 2017.09.28 |
배열 어셈블리 (0) | 2017.09.28 |
인라인 어셈 함수 인자 전달 (0) | 2017.09.27 |
어셈블리 함수 공부 중
gdb-peda$ disassemble main
Dump of assembler code for function main:
[ 스택 프롤로그 ]
0x0804843c <+0>: push ebp
0x0804843d <+1>: mov ebp,esp
0x0804843f <+3>: sub esp,0x8
////////////////////////////////////////////////////////////////////
0x08048449 <+13>: mov DWORD PTR [ebp-0x8],0x14
// int v2 = 20;
0x08048450 <+20>: push DWORD PTR [ebp-0x8]
// 20
0x08048453 <+23>: push DWORD PTR [ebp-0x4]
// 10
0x08048456 <+26>: call 0x804840b <f1>
// f1(10, 20)
0x0804845b <+31>: add esp,0x8
////////////////////////////////////////////////////////////////////
0x08048463 <+39>: leave
0x08048464 <+40>: ret
End of assembler dump.
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
'어셈블리' 카테고리의 다른 글
인라인 어셈블리 (0) | 2017.10.15 |
---|---|
제곱 어셈블리 (0) | 2017.10.13 |
배열 어셈블리 (0) | 2017.09.28 |
인라인 어셈 함수 인자 전달 (0) | 2017.09.27 |
어셈블리 문자열 복사 stos (0) | 2017.09.27 |
gdb-peda$ list
1 # include <stdio.h>
2
3 int main(void) {
4 int array[] = {10, 20 ,30, 40, 50};
5
6 return 0;
7 }
gdb-peda$ disassemble main
Dump of assembler code for function main:
////////////////////////////////////////////////////////////////////
0x080483db <+0>: push ebp
0x080483dc <+1>: mov ebp,esp
0x080483de <+3>: sub esp,0x14
////////////////////////////////////////////////////////////////////
0x080483e1 <+6>: mov DWORD PTR [ebp-0x14],0xa
0x080483e8 <+13>: mov DWORD PTR [ebp-0x10],0x14
0x080483ef <+20>: mov DWORD PTR [ebp-0xc],0x1e
0x080483f6 <+27>: mov DWORD PTR [ebp-0x8],0x28
0x080483fd <+34>: mov DWORD PTR [ebp-0x4],0x32
////////////////////////////////////////////////////////////////////
[ 스택 에필로그 ]
0x08048404 <+41>: mov eax,0x0
0x08048409 <+46>: leave
0x0804840a <+47>: ret
////////////////////////////////////////////////////////////////////
End of assembler dump.
'어셈블리' 카테고리의 다른 글
제곱 어셈블리 (0) | 2017.10.13 |
---|---|
어셈블리 함수 공부 중 (0) | 2017.09.28 |
인라인 어셈 함수 인자 전달 (0) | 2017.09.27 |
어셈블리 문자열 복사 stos (0) | 2017.09.27 |
overflow 어셈블리 (0) | 2017.09.27 |
인라인 어셈 함수 인자 전달
# include <stdio.h>
void f(int param1, int param2) {
char* checkPrompt = "param1 => %d param2 => %d\n";
__asm {
mov eax, dword ptr ss : [ebp + 0x8];
mov ebx, dword ptr ss : [ebp + 0xc];
push eax;
push ebx;
push checkPrompt;
call dword ptr[printf];
pop ebx;
pop ebx;
pop ebx;
leave;
retn;
}
}
int main(void) {
__asm {
mov eax, 10;
mov ebx, 11;
push ebx;
push eax;
call dword ptr[f];
pop ebx;
pop ebx;
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 함수 공부 중 (0) | 2017.09.28 |
---|---|
배열 어셈블리 (0) | 2017.09.28 |
어셈블리 문자열 복사 stos (0) | 2017.09.27 |
overflow 어셈블리 (0) | 2017.09.27 |
어셈블리 크기 비교 (0) | 2017.09.27 |
어셈블리 문자열 복사 stos
# include <stdio.h>
int main(void) {
char buf[100] = { 0, };
char* promptResult = "buf => %s\n";
__asm {
mov eax, 0x6c6c6568; // little endian
lea edi, dword ptr[buf];
stos dword ptr[edi];
mov eax, 0x6f77206f; // little endian
stos dword ptr[edi];
mov eax, 0x646c72; // little endian
stos dword ptr[edi];
//////////////////////////////////////////
lea edi, dword ptr[buf];
push edi;
push promptResult;
call dword ptr[printf];
pop ebx;
pop ebx;
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
배열 어셈블리 (0) | 2017.09.28 |
---|---|
인라인 어셈 함수 인자 전달 (0) | 2017.09.27 |
overflow 어셈블리 (0) | 2017.09.27 |
어셈블리 크기 비교 (0) | 2017.09.27 |
어셈블리 div (0) | 2017.09.26 |
overflow 어셈블리
# include <stdio.h>
int main(void) {
char v = 127;
char* prompt = "overflow \n";
char* prompt_1 = "not overflow \n";
__asm {
add v, 0x1;
jo s;
jno sn;
s:
push prompt;
call dword ptr[printf];
pop ebx;
jmp TheEnd;
sn:
push prompt_1;
call dword ptr[printf];
pop ebx;
jmp TheEnd;
TheEnd:
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
인라인 어셈 함수 인자 전달 (0) | 2017.09.27 |
---|---|
어셈블리 문자열 복사 stos (0) | 2017.09.27 |
어셈블리 크기 비교 (0) | 2017.09.27 |
어셈블리 div (0) | 2017.09.26 |
어셈블리 최소값 추출 (0) | 2017.09.26 |
어셈블리 크기 비교
# include <stdio.h>
int main(void) {
int v1 = 0; // initiallize
int v2 = 0; // initiallize
char* prompt = "%d %d";
char* s1 = " > \n";
char* s2 = " < \n";
char* s3 = " == \n";
__asm {
lea eax, v1; // eax = &v1
lea ebx, v2; // ebx = &v2
push ebx;
push eax;
push prompt;
call dword ptr[scanf];
pop ebx;
pop ebx;
pop ebx;
mov eax, v1;
mov ebx, v2;
cmp eax, ebx;
je sameJump;
jne notSameJump;
sameJump:
push s3;
call dword ptr[printf];
pop ebx;
jmp TheEnd;
notSameJump:
ja aboveJmp; // v1 > v2
jna belowJmp; // v1 > v2
aboveJmp:
push s1;
call dword ptr[printf];
pop ebx;
jmp TheEnd;
belowJmp:
push s2;
call dword ptr[printf];
pop ebx;
jmp TheEnd;
TheEnd:
xor eax, eax;
leave;
retn;
}
}
'어셈블리' 카테고리의 다른 글
어셈블리 문자열 복사 stos (0) | 2017.09.27 |
---|---|
overflow 어셈블리 (0) | 2017.09.27 |
어셈블리 div (0) | 2017.09.26 |
어셈블리 최소값 추출 (0) | 2017.09.26 |
어셈블리 배열 출력 (0) | 2017.09.26 |
# include <stdio.h>
int main(void) {
int v1 = 243;
int v2 = 5;
int v3 = 0;
int v4 = 0;
__asm {
xor edx, edx; // mov edx, 0x0
mov eax, v1;
mov ebx, v2;
div ebx;
mov v3, edx; // remainder => edx
mov v4, eax; // queotiont => eax
}
printf("%d %d\n", v3, v4);
return 0;
}
'어셈블리' 카테고리의 다른 글
overflow 어셈블리 (0) | 2017.09.27 |
---|---|
어셈블리 크기 비교 (0) | 2017.09.27 |
어셈블리 최소값 추출 (0) | 2017.09.26 |
어셈블리 배열 출력 (0) | 2017.09.26 |
곱하기 어셈 문제 (0) | 2017.09.24 |