能力值:
( LV13,RANK:1050 )
|
-
-
2 楼
我给修改了下:
#include <windows.h>
#include <iostream>
using namespace std;
__declspec(naked) unsigned long /*__fastcall*/ MystrlenA(const char *arg_0)
{
__asm
{
mov ecx, [ESP+4]
test ecx, 3
jz short loc_7C94B87D
loc_7C94B863: ; CODE XREF: strlen+1B.j
mov al, [ecx]
add ecx, 1
test al, al
jz short loc_7C94B8B2
test ecx, 3
jnz short loc_7C94B863
add eax, 0
lea esp, [esp]
lea esp, [esp]
loc_7C94B87D: ; CODE XREF: strlen+A.j
; strlen+3C.j ...
mov eax, [ecx]
mov edx, 7EFEFEFFh
add edx, eax
xor eax, 0FFFFFFFFh
xor eax, edx
add ecx, 4
test eax, 81010100h
jz short loc_7C94B87D
mov eax, [ecx-4]
test al, al
jz short loc_7C94B8D0
test ah, ah
jz short loc_7C94B8C6
test eax, 0FF0000h
jz short loc_7C94B8BC
test eax, 0FF000000h
jnz short loc_7C94B87D
jmp short loc_7C94B8B2
; ---------------------------------------------------------------------------
jmp short loc_7C94B87D
; ---------------------------------------------------------------------------
loc_7C94B8B2: ; CODE XREF: strlen+13.j
; strlen+57.j
lea eax, [ecx-1]
mov ecx, [esp+4]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_7C94B8BC: ; CODE XREF: strlen+4E.j
lea eax, [ecx-2]
mov ecx, [esp+4]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_7C94B8C6: ; CODE XREF: strlen+47.j
lea eax, [ecx-3]
mov ecx, [esp+4]
sub eax, ecx
retn
; ---------------------------------------------------------------------------
loc_7C94B8D0: ; CODE XREF: strlen+43.j
lea eax, [ecx-4]
mov ecx, [esp+4]
sub eax, ecx
retn
}
}
void main()
{
char code[8]="abcdefg";
cout<<MystrlenA(code)<<endl;
system("pause");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢楼上的两位,谢谢
|
能力值:
( LV12,RANK:1010 )
|
-
-
5 楼
寄存器传参
|