인라인 어셈블리를 사용하려고합니다 ... 이 페이지 http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx을 읽었지만 내 함수로 전달되는 매개 변수를 이해할 수 없습니다.C/C++에서 인라인 어셈블리 사용
가 나는 C 쓰기 예를 쓰고 있어요 ..이 내 기능 헤더입니다 :
write2(char *str, int len){
}
그리고 이것은 내 어셈블리 코드입니다 : 내가 그 코드를 통과해야 할 일을
global write2
write2:
push ebp
mov ebp, esp
mov eax, 4 ;sys_write
mov ebx, 1 ;stdout
mov ecx, [ebp+8] ;string pointer
mov edx, [ebp+12] ;string size
int 0x80 ;syscall
leave
ret
C 함수에 ... 나는이 같은 일을 해요 :
write2(char *str, int len){
asm ("movl 4, %%eax;"
"movl 1, %%ebx;"
"mov %1, %%ecx;"
//"mov %2, %%edx;"
"int 0x80;"
:
: "a" (str), "b" (len)
);
}
내가 출력 변수가 없기 때문에, 그래서를 어떻게 할 그걸 처리해? 이 코드 또한 :
global main
main:
mov ebx, 5866 ;PID
mov ecx, 9 ;SIGKILL
mov eax, 37 ;sys_kill
int 0x80 ;interruption
ret
나는 그래서이 같은 .. 사용자에게 PID를 요청할 수 있습니다 .. 내 코드에서 해당 코드 인라인을 넣을 수있는 방법 ... 이 내 프리 코드
입니다void killp(int pid){
asm ("mov %1, %%ebx;"
"mov 9, %%ecx;"
"mov 37, %%eax;"
:
: "a" (pid) /* optional */
);
}
str, len?과 함께 하나의 매개 변수를 전달하려고하거나 str을 쓰고 자하는 파일 설명자를 보내려는 것을 의미합니까? – Zimbabao
그냥 내 문자열 포인터와 문자열 길이를 전달하고 싶습니다 ... 정확히 어셈블리 코드를 보면 ... syscall 만 사용하면 문자열을 표준 출력으로 인쇄 할 수 있습니다. – RodrigoCR