装配动态调用导致分段错误

时间:2017-02-16 03:16:46

标签: assembly masm32

我正在做一个大学项目,所以我正在尝试在MASM32中编写一个PE感染者。 所需功能之一不是直接调用所需的函数,而是动态查找其地址: 我在内存中搜索kernel32 lib,用它的导出表我找到GetProcAddressName函数,然后找到GetModuleHandle函数,然后用这个我加载user32句柄,我用GetProcAdsress获取函数;我的例子中的MessageBoxA:

    push MB_OK
    push offset hello
    push offset hello
    push 0
    call  MessageBoxA

结果是调用MessageBoxAddr时出现分段错误。 如果我调用原始函数,则无效,无论在何处:

public static void bubbleSort(ArrayList<Integer> list){
        for(int i = 0; i < list.size(); i++) {
            for(int j = 1; j < (list.size() -i); j++) {
                if(list.get(j - 1) > list.get(j)) {
                    int temp = list.get(j-1);
                    list.set(j-1, list.get(j));
                    list.set(j, temp);
                }                   
            }
        }       
    }

如果我在此调用之前或之后放置此样本,这两个调用都有效,这对我来说是完全没有意义的。

你有任何线索吗?谢谢

1 个答案:

答案 0 :(得分:1)

问题解决了: GetModuleHandle函数仅在lib已经加载到内存中时才有效,并提供了它的句柄。

我使用的是LoadLibraryA(找不到LoadLibrary,我不知道为什么......)并且它完美无缺。无论如何,谢谢:p