吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 445|回复: 4
收起左侧

[经验求助] 关于ida加载的exe的基地址问题。基地址默认都是0x400000?

[复制链接]
durongze 发表于 2024-8-10 08:17
25吾爱币
[Asm] 纯文本查看 复制代码
; Attributes: bp-based frame

; int __cdecl main(int argc, const char **argv, const char **envp)
_main proc near

argc= dword ptr  8
argv= dword ptr  0Ch
envp= dword ptr  10h

push    ebp
mov     ebp, esp
mov     eax, [ebp+argc]
push    eax
mov     ecx, [ebp+argc]
push    ecx
call    sub_401000
add     esp, 8
xor     eax, eax
pop     ebp
retn
_main endp



上面的汇编对应的是c文件是:
[Asm] 纯文本查看 复制代码
int mw_add(int number1, int number2)
{
    return number1 + number2;
}

int main(int argc, char** argv)
{
    mw_add(argc, argc);
    return 0;
}


=========================================
sub_401000        .text        00401000        0000000B        00000004        00000008        R        .        .        .        .        .        B        .        .
_main                .text        00401010        00000017        00000004        0000000C        R        .        .        .        .        .        B        T        .
从这里可以看出main的地址是0x401010,mw_add的地址是0x401000.
如果使用loadLibrary加载这个exe,返回的是hdl. 如果调用mw_add 是不是应该用hdl + 0x1000  ?   
反汇编出的 0x400000,其实就是loadLibrary的hdl?
难道hdl 不会直接是0x401000,或者其他值?
难道IDA加载的所有exe 默认都以0x400000作为基地址?

最佳答案

查看完整内容

约定俗成的:exe基址用0x00400000,dll基址用0x00100000。编译器默认编译出来就是这样的,基址可以改的

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

waiwai24 发表于 2024-8-10 08:17
约定俗成的:exe基址用0x00400000,dll基址用0x00100000。编译器默认编译出来就是这样的,基址可以改的
 楼主| durongze 发表于 2024-8-10 08:21
var app_addr = app_hdl + app_offset;
var app_func = (AppFuncAdd)Marshal.GetDelegateForFunctionPointer(app_addr, typeof(AppFuncAdd));

app_func.Target  始终为空, 是不是app_hdl 和  app_offset 不对?这两个变量应该等于多少呢?
 楼主| durongze 发表于 2024-8-14 18:29
有大佬,可以帮忙看我这个帖子吗?

var app_addr = app_hdl(这个是loadlibrary返回值) + app_offset(这个应该是0x1000,对吧);
var app_func = (AppFuncAdd)Marshal.GetDelegateForFunctionPointer(app_addr, typeof(AppFuncAdd));
但是找不到这个函数呢?
 楼主| durongze 发表于 2024-8-19 10:53
waiwai24 发表于 2024-8-15 10:52
约定俗成的:exe基址用0x00400000,dll基址用0x00100000。编译器默认编译出来就是这样的,基址可以改的

加载是成功了,但是下面这个写法找不到mw_add这个函数呢?这是为啥?
var app_addr = app_hdl(这个是loadlibrary返回值) + app_offset(这个应该是0x1000,对吧);
var app_func = (AppFuncAdd)Marshal.GetDelegateForFunctionPointer(app_addr, typeof(AppFuncAdd));
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 04:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表