有人可以解释为什么我的strcat这样做?strcat溢出?
我似乎无法找出为什么我重写源字符串的一部分。
输出是这样的:新的字符串:HelloThis应是我的反斜线0后STR1H 0 STR1
global strcat
extern strlen
的strcat:
push ebp
mov ebp, esp
push ecx
push esi
push edi
push ebx
push edx
xor edx, edx
xor edi, edi
xor ebx, ebx
xor esi, esi
xor ecx, ecx
mov edi, [ebp + 8]
mov esi, [ebp + 12]
push edi
call strlen
pop edi
mov ecx, eax
xor eax, eax
push esi
call strlen
pop esi
mov ebx, eax
xor eax, eax
cmp [edi + ecx], byte 0b
je PUT_LINE
jmp FINALIZE_END
PUT_LINE:
cmp ebx, eax
je END
mov dl, [esi + eax]
mov [edi + ecx], dl
xor edx, edx
inc eax
inc ecx
jmp PUT_LINE
END:
mov eax, [ebp + 8]
jmp FINALIZE_END
FINALIZE_END:
pop edx
pop ebx
pop edi
pop esi
pop ecx
mov esp, ebp
pop ebp
ret
〜
〜
int main(int argc, char** argv)
{
(void)argc;
(void)argv;
char* str1;
char* str2;
str1 = strdup("Hello");
str2 = strdup("This shall be after my backslash 0 in str1");
printf("New String : %s\n", strcat(str1, str2));
return (0);
}
〜
对不起,我刚刚解决了它,好像Printf也查找\ 0,但是因为我没有在目标字符串末尾设置\ 0,所以它溢出了。 END: MOV [EDI + ECX],字节0B MOV EAX,[EBP + 8] JMP FINALIZE_END – Skyline 2012-03-10 12:33:11
归零寄存器加载到他们面前有点失败写汇编的目的... – 2012-03-10 12:39:05
我只是想为了避免我是否使用8位或16位的问题,并且猜测它成了一个坏习惯,但是要感谢间接建议。 – Skyline 2012-03-10 12:44:13