네이버 풀이
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);
} //