랜덤 어셈블리

어셈블리2017. 12. 1. 13:23

//--------------------------------------

# include <stdio.h>

# include <Windows.h>

# include <stdlib.h>

# include <time.h>

//--------------------------------------

void __init__(PVOID ptrValue);

void __RandomChoice__(PVOID ptrValue);

int main(void) {

__int32 number[50] = { 0, };

__asm LEA EDI, dword ptr[number];

__asm PUSH EDI;

__asm CALL dword ptr[__init__];

__asm POP ebx;

__asm CALL dword ptr[__RandomChoice__];

//TEST 

/*

for (int i = 0; i < 50; i++) {

printf("%d ", number[i]);

}

*/

return 0;

} // end of main function 

void __init__(PVOID ptrValue) {

int t_value = 0x1;

__asm {

MOV ECX, 50; // ecx = 50 

    // --------------------------------------------

MOV EBX, 0x0;

L: // COUNT

PUSH ECX; // 1

PUSH EBX; // 2

MOV EAX, dword ptr[t_value];

MOV EDI, dword ptr[EBP + 0x8];

POP EBX; // 1

MOV dword ptr[EDI + EBX], EAX;

ADD EBX, 0x4; // ebx += 0x4

PUSH EBX; // 2

INC EAX;

MOV dword ptr[t_value], EAX;

pop EBX;

POP ECX;

Loop L;

}

} // end of __init__ function 

void __RandomChoice__(PVOID ptrValue) {

//srand((unsigned)time(NULL));

// rand()%10

__int32 x = 0x0;

char *str_value = "result is %d\n";

__asm {

//-------------------------------

push 0;

call        dword ptr[time];

pop ebx;

//-------------------------------

push        eax;

call        dword ptr[srand];

pop ebx;

//-------------------------------

call        dword ptr[rand];

mov         ebx, 0Ah;

xor edx, edx;

idiv        ebx;

add         edx, 1;

mov         dword ptr[x], edx;

//-------------------------------

push dword ptr[x];

push dword ptr[str_value];

call dword ptr[printf];

pop ebx;

pop ebx;

leave;

retn;

}

} // end of __RandomChoice__ function

'어셈블리' 카테고리의 다른 글

네이버 풀이  (0) 2017.12.22
어셈블리 cdq  (3) 2017.12.01
네이버  (0) 2017.11.20
포인터 접근 방식  (0) 2017.11.14
stack 구조 엑셀  (0) 2017.11.14