비전공자인데 요즘 용돈벌이로 하는 게 잇음
거기서 올리디버거 키고 어셈블리어로 코딩을 해야했어서 어셈블리어로 적는데 간단한 sprintf 쓰는 것도 존나 힘들더라
IDE키고 C나 C++로 짜면
char buffer[100] = "%d";
sprintf(buffer, buffer, 14);
이런 코드를 어셈으로 짜서 sprintf 하다가 ACCESS_VIOLATION 으로 프로그램이 죽어버리고
정신 차리고 스택 할당한 다음에 strcpy 호출하니까 음.. 복사가 되다 마네?
눈 똑바로 뜨고 다시 보니까 이게 유니코드라 메모리 33 00 34 00 이런식으로 올라와있어서 33 복사하고 말더라
strcpy의 유니코드 버전이 프로그램 어디에 있는지 주소값을 몰라서 call을 못하겟고 그래서 memcpy로 복사하고
wsprintf 콜햇더니 서식 텍스트가 그대로 잇어? 복사가 안 돼..?? 외않되!!! 씨발 하고 찾아보니까 wsprintf는 %d 서식 문자열 처리를 못한다네
아 ㅋㅋ
결과적으로 서식 문자열 말고 다른 더미 문자열 채워넣고 memcpy로 해당 메모리에 덮어 씌우는 방식으로 해결했는데
어셈 좀 만질때 마다 존나 아쉽다 컴공 갔으면은 교수한테 제대로 배워서 기초도 탄탄하고 좋앗을텐데 너무 아쉬움
댓글 0