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 |