首页
社区
课程
招聘
[求助]把IDA中的代码复制到C++中有问题
发表于: 2008-6-20 12:03 5667

[求助]把IDA中的代码复制到C++中有问题

2008-6-20 12:03
5667
用IDA看了一下ntdll中的strlen代码,然后把代码复制到C++中,编译可以,但是结果不对。请大家为我看看,本人是菜鸟,请各位帮帮忙。请各位尽量说的详细一点。谢谢。
代码如下:
#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+1Bj
                 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+Aj
                                         ; strlen+3Cj ...
                 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+13j
                                         ; strlen+57j
                 lea     eax, [ecx-1]
                 mov     ecx, [esp+4]
                 sub     eax, ecx
                 retn
; ---------------------------------------------------------------------------

loc_7C94B8BC:                           ; CODE XREF: strlen+4Ej
                 lea     eax, [ecx-2]
                 mov     ecx, [esp+4]
                 sub     eax, ecx
                 retn
; ---------------------------------------------------------------------------

loc_7C94B8C6:                           ; CODE XREF: strlen+47j
                 lea     eax, [ecx-3]
                 mov     ecx, [esp+4]
                 sub     eax, ecx
                 retn
; ---------------------------------------------------------------------------

loc_7C94B8D0:                           ; CODE XREF: strlen+43j
                 lea     eax, [ecx-4]
                 mov     ecx, [esp+4]
                 sub     eax, ecx
                 retn

        }

}
void main()
{
        char code[8]="abcdefg";
        cout<<MystrlenA(code)<<endl;
        system("pause");
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 321
活跃值: (275)
能力值: ( 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");
}
2008-6-20 13:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2008-6-20 13:58
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上的两位,谢谢
2008-6-20 15:24
0
雪    币: 709
活跃值: (2590)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
5
寄存器传参
2008-6-20 16:18
0
游客
登录 | 注册 方可回帖
返回