首页
社区
课程
招聘
[求助]指针寻址为何少1?
发表于: 2008-5-6 22:51 3859

[求助]指针寻址为何少1?

2008-5-6 22:51
3859
typedef struct tagBtCode
{
        DWORD dwTemp[2];
        DWORD ContinueJumpAddr;       
        BYTE nop_code[0x4];
        BYTE JumpCode[0xc];
}BtCode,*lpBtCode;

inline DWORD GetParamAddr(LPVOID lpParam)
{
        _asm mov eax,lpParam;
}
DWORD func(void)
{
        BtCode *code=NULL;
        BYTE *lpAddr=NULL;
        memset(code->nop_code,0x90,sizeof(code->nop_code));
        memset(code->JumpCode,0x90,sizeof(code->JumpCode));

        lpAddr=(BYTE*)::VirtualAlloc (0,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE );
        if(lpAddr==NULL)return 0;
        code=(BtCode*)lpAddr;

        code->ContinueJumpAddr=xxxxx;//存放返的地址

        lpAddr=code->JumpCode ;
        *(WORD*)lpAddr=0x016a;//push 1
        *(WORD*)(lpAddr+2)=0x25ff;
        *(DWORD*)(lpAddr+4)=::GetParamAddr (&code->ContinueJumpAddr);//Jmp dword ptr ds:[&code->ContinueJumpAddr];

        _asm{
                push lpAddr;
                pop  eax;
        }
}
函数的返回值:0xf150010

反汇编中看到:
0f15000f    6A01                           push    01                              ;
0f150011    FF250800150F                   jmp     dword ptr [f150008]   

发现 push 1这一句的地址和上面这个函数的返回值少1

谁帮解释一下是怎么回事?

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
结构BtCode的对齐问题

加上 #pragma pack(1)
2008-5-7 11:12
0
雪    币: 222
活跃值: (69)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
加上之后还是一样
最后只好在func的返回值-1虽然达到目的,但还是弄不白
2008-5-7 15:44
0
游客
登录 | 注册 方可回帖
返回