번 호 : 4299 게시자 : 서영수 (syssos ) 등록일 : 1998-09-20 18:56 제 목 : [참고/4298] VC++ 인라인 어셈 memcpy를 어셈에서 쓰려면 우선 memcpy의 정의가 어떻게 되어 있는지 알아야 겠죠. void *memcpy( void *dest, const void *src, size_t count ); 이렇게 정의가 되어 있죠. 이걸 호출하려면 인자를 스택에 저장한 뒤 call을 하면 됩니다. 인자의 저장순서는 count, src, dest로 역으로 해 주면 됩니다. 그러니까 호출하려는 쪽에 dest, src, count라는 변수가 있으면 mov eax, [dest] push eax mov eax, [src] push eax mov eax, [count] push eax call _memcpy add esp, 12 뭐 대충 아시겠죠. 포인터는 32비트고 size_t는 대개 정수일텐데 32비트에서는 int가 32비트니까 문제는 없겠죠. 이렇게 어셈에서 C를 호출할 때 중요한 건 인수를 스택에 저장할 때 꼭 32비트단위로 해야 한다는 겁니다. 만약 인수가 char라고 해도 1바이트만 보내면 안 됩니다.(원래 불가능한가...???) 마지막에 add는 스택에서 인수를 제거해 주는 겁니다. 아시죠? 하지만 인라인어셈은 꼭 필요한 데만 쓰시고 함수호출같은 건 그냥 C로 하는 게 더 나을 것 같네요. *_+ 음 그런데 push [src] 이런 것도 되던가...??? 잘 몰라서 그냥 eax에 넣어서 push했는데...^^;