(gdb)b strtoint
(gdb)r
调试到strtoint时直接跳到了lb_exit或干脆就到结束的}号那里 调试不了那个函数的语句。
请问这个有法解决么?
代码: 全选
#include <stdio.h>
#include <string.h>
#ifndef NMULTD
#define NMULTD(n)(((n) << 10) - ((n) << 4) - ((n) << 3))
#endif
#ifndef __max
#define __max(a, b)((a) > (b) ? (a) : (b))
#endif
int strtoint(char* a)
{
asm
(
".intel_syntax noprefix\n"
"push ebx\n"
"push ecx\n"
"push edx\n"
"mov ebx, dword ptr [ebp + 8]\n"
"xor eax, eax\n"
"xor edx, edx\n"
"movzx ecx, byte ptr [ebx]\n"
"cmp ecx, '-'\n"
"jne lb_trytonumber\n"
"inc ebx\n"
"or edx, 0x01\n"
"lb_trytonumber:\n"
"movzx ecx, byte ptr [ebx]\n"
"test ecx, ecx\n"
"jz lb_testflag\n"
"sub ecx, 0x30\n"
"jl lb_badformat\n"
"cmp ecx, 0x09\n"
"jg lb_badformat\n"
"imul eax, 0x0A\n"
"jo lb_badformat\n"
"add eax, ecx\n"
"jo lb_badformat\n"
"inc ebx\n"
"jmp lb_trytonumber\n"
"lb_badformat:\n"
"xor eax, eax\n"
"jmp lb_exit\n"
"lb_testflag:\n"
"test edx, edx\n"
"jz lb_exit\n"
"neg eax\n"
"lb_exit:\n"
"pop edx\n"
"pop ecx\n"
"pop ebx\n"
".att_syntax noprefix\n"
);
}
int main(int argc, char *argv[])
{
char s[256];
int i;
printf("hello linux!\r\nplease type a integer value:");
fgets(s, 9, stdin);
i = strlen(s) - 1;
s[__max(0, i)] = 0;
i = strtoint(s);
printf("[%s * 1000 = %d]\r\n", s, NMULTD(i));
return 0;
}