네이버 풀이

어셈블리2017. 12. 22. 16:49

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=290822985

# include <stdio.h>

# include <stdlib.h>

# include <string.h>

char* f_stc(char* param1, char* param2);

int main(void) {

char str1[50] = { 0, }; // 초기화

char str2[50] = { 0, }; // 초기화


// str_1 value input

printf("input string_1 :  ");

fgets(str1, 50, stdin);

str1[strlen(str1) - 1] = '\0';

//printf("test %#x %c\n", &str1[strlen(str1) - 1], str1[strlen(str1) - 1]);


// str_2 value input

printf("input string_2 :  ");

fgets(str2, 50, stdin);

str2[strlen(str2) - 1] = '\0';


f_stc(str1, str2);

return 0;

}

char* f_stc(char* param1, char* param2) {

char* pValue = NULL;

char* sprompt = "%s\n";

__asm {

MOV ESI, dword ptr[param2];

PUSH ESI; // ESI 값 보존 ------ (1)

MOV EDI, param1; // EDI = addr

MOV EAX, param1;

PUSH EAX;

CALL dword ptr[strlen]; // strlen(EAX)

MOV ECX, EAX;

POP EBX;

PUSH ECX; // ECX 값 보존 ------ (2)


L1:

ADD EDI, 0x1;

CMP byte ptr[EDI], 0x0;

JNE L1; // Jump Not Equal

//DEC EDI;

//MOV pValue, EDI;

PUSH EDI; // EDI 값 보전 ------ (3)


POP EDI; // -------------------(3)

POP ECX; // -------------------(2)

POP ESI; // -------------------(1)

REP MOVS byte ptr[EDI], byte ptr[ESI];

MOV byte ptr[EDI], 0x0;

}

printf("result => %s\n", param1);

} // 

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

2018_05_30_01  (0) 2018.05.29
오늘 공부한 내용 날림 나 혼자 보려고 끄적인 것  (0) 2018.01.22
어셈블리 cdq  (3) 2017.12.01
랜덤 어셈블리  (0) 2017.12.01
네이버  (0) 2017.11.20