1
외부 어셈블리 함수를 호출하는 C 프로그램을 실행하고 있습니다. 학업 목적으로 strcat
을 (를) 수행하려고합니다. 두 문자열을 char * 매개 변수로 어셈블리 프로그램에 전달합니다. 나는 스택에 EBP를 밀어과 같이 EDX와 EBX에 문자열 1과 문자열 2를 할당 :루프가 예상대로 수행되지 않습니다.
mov edx, [ebp+8]
mov ebx, [ebp+4]
이제 나머지는 다음과 같다 :
procStr1:
cmp BYTE PTR [edx], 0
jne readStr1
procStr2:
cmp BYTE PTR [ebx], 0
jne readStr2
jmp bottom
readStr1:
inc edx
jmp procStr1
readStr2:
mov BYTE PTR [edx], 'a'
inc edx
inc ebx
jmp procStr2
bottom:
inc edx
mov BYTE PTR [edx], 0
pop ebx
pop edx
pop ebp
ret
나는 단순히 추가하여 작동하는지 확인하는 테스트입니다 a는 string1의 끝 부분에 있습니다. 'hi'와 'bye'를 입력하면 C 프로그램에서 hiaaa를 인쇄합니다 (string1을 인쇄하여). 대신 나는 큰 string2가 아무리 큰데도 보통 string1 다음에 13 개의 a를 얻습니다. 상단에
push ebp
mov ebp, esp
: 나는
한 데이터 처리가 내가 생각 그것은 단지의 (즉'INC edx' 제외) 괜찮 은데, 또한
:
그렇다면, 당신의 인수는 이제에서 찾을 수 있습니다 올바른 위치에서 포인터를 가져 오는 문제 – Martin
Visual Studio에서 컴파일 할 때 [ebp + C]를 할 때 구문 오류가 발생합니다. 그리고 오른쪽에서 왼쪽으로 두 번째 매개 변수가 먼저 스택에 푸시되었음을 의미합니까? – Rythven
포스트를 편집했습니다. C는 16 진수이므로 12 (C의 값)를 사용하거나 h를 추가하십시오. 아이디어는 정확하고 구문 오류 일뿐입니다. 오른쪽에서 왼쪽으로, 예, 제 2 매개 변수는 첫 번째 매개 변수보다 먼저 푸시됩니다. 그것은 C 호출 규칙이며 가변 인수를 허용합니다. –