【发布时间】:2017-07-06 00:40:18
【问题描述】:
我正在使用 Assembly 编程,出现以下错误:
Application1.exe 中 0x00B71792 处引发异常:0xC0000005:访问冲突写入位置 0x00B76BED。
Application1.exe 中 0x00B71792 处的未处理异常:0xC0000005:访问冲突写入位置 0x00B76BED。
我正在使用 Visual Studio 进行编程。下面是我的代码:
char *strCat(char *dest, char *src) {
__asm {
xor eax, eax
mov ecx, 0xffffffff
mov esi, src
mov edi, dest
mov al, 0
cld
repne scasb
dec edi
L0 :
lodsb
stosb
test al, al
jne L0
mov eax, edi
};
}
根据调试,stosb指令出现错误。
在我看来,代码是正确的。找不到错误。
【问题讨论】:
-
您是否在 VIsual Studios 的 C++ 调试器中单步执行了内联汇编程序来观察会发生什么?
-
值 0xffffffff 看起来很可疑。它有什么用?
-
我们需要知道你用来调用那个函数的参数。您不能随意连接字符。例如,
strCat("abc", "123")很可能会崩溃。 -
没有 cmets 的汇编语言是没用的。有人告诉我,重写没有 cmets 的汇编代码比试图理解它更有效率。
-
见上面@PaulMcKenzie 的评论。你不能那样做。你知道 C 吗?
标签: c++ visual-studio assembly visual-c++