首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C++中使用LoadLibrary(..)调用kernel32.dll函数GetTickCount()

在C++中,可以使用LoadLibrary函数动态加载kernel32.dll,并通过GetProcAddress函数获取GetTickCount函数的地址。以下是一个示例代码:

代码语言:cpp
复制
#include<iostream>
#include<windows.h>

typedef DWORD (WINAPI *GETTICKCOUNT)();

int main() {
    HINSTANCE hDll = LoadLibrary(TEXT("kernel32.dll"));
    if (hDll == NULL) {
        std::cerr << "Failed to load kernel32.dll"<< std::endl;
        return 1;
    }

    GETTICKCOUNT GetTickCountFunc = (GETTICKCOUNT)GetProcAddress(hDll, "GetTickCount");
    if (GetTickCountFunc == NULL) {
        std::cerr << "Failed to get address of GetTickCount"<< std::endl;
        FreeLibrary(hDll);
        return 1;
    }

    DWORD tickCount = GetTickCountFunc();
    std::cout << "GetTickCount: "<< tickCount<< std::endl;

    FreeLibrary(hDll);
    return 0;
}

在这个示例中,我们首先使用LoadLibrary函数加载kernel32.dll,然后使用GetProcAddress函数获取GetTickCount函数的地址。接着,我们可以通过这个地址调用GetTickCount函数,并输出结果。最后,我们使用FreeLibrary函数释放kernel32.dll

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Windows下的代码注入

    那么如何在远程进程执行DLL的加载操作呢?...其实不光是LoadLibrary函数,只要是kernel32.dll中导出的函数,在不同进程的地址都是一样的。...注意这里只是32位,如果想要使用32位程序往64位目标程序中注入,可能需要考虑地址转换的问题,只要知道kernel32.dll在64位的偏移,就可以计算出对应函数的地址了。...最后总结一下DLL注入的步骤: 获取LoadLibrary函数的地址 调用VirtualAllocEx 函数在远程进程申请一段虚拟内存 调用WriteProcessMemory 函数将参数写入对应的虚拟内存...无dll的注入主要麻烦是在进行地址转化上,在调用API的时候,如果无法保证对应的dll的基地址不变的话,就得在目标进程自行调用LoadLibrary来动态获取函数地址,并调用

    1.4K20

    1.12 进程注入ShellCode套接字

    ,首先声明了一个结构体变量Param,然后调用LoadLibrary函数加载kernel32.dll库,将得到的句柄存储到Param.KernelHandle。...2.使用LoadLibrary和GetProcAddress函数获取Kernel32库LoadLibrary和GetProcAddress函数的地址,并将其保存到Param结构体的相应字段。...( cmd.exe)的标准输入和输出流上,这样攻击者即可通过这个管道来使用远程的CMD命令行,并以此达到控制对方的目的。...首先,通过调用 LoadLibrary 和 GetProcAddress 函数,获取到 ws2.dll 和 kernel32.dll 函数地址,分别是 WSAStartup、WSASocket、WsaConnect...通过 LoadLibrary 和 GetProcAddress 函数获取到 kernel32.dll LoadLibrary 和 GetProcAddress 函数的地址。

    24740

    C# 六种方式实现精确计时

    根据综合网上的一些文章,精确计时主要有以下几种方式 1 调用WIN APIGetTickCount [DllImport("kernel32")]static extern uint GetTickCount...(); Thread.Sleep(2719); Console.WriteLine(GetTickCount() - s1); //单位毫秒 2 调用WIN API的timeGetTime 推荐...经反编译猜测它可能也是调用GetTickCount,但是它的返回值是int,而GetTickCount与timeGetTime方法的原型返回值是DWORD,对应C#的uint,难道.NET对System.Environment.TickCount...4 调用WIN API的QueryPerformanceCounter [DllImport("kernel32.dll ")] static extern bool QueryPerformanceCounter...精度是ns 在C#要用该方法必须先建立一个托管C++项目(因为要内嵌汇编),编译成DLL供c#调用,有点麻烦。

    1.3K30

    CC++ 进程代码注入&提权&降权

    Param.Kernel32Base = LoadLibrary("kernel32.dll"); Param.Kernel_LoadLibrary = (LOADLIBRARY)GetProcAddress..., LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); main函数向结构体拷贝数据...parametros.KernelHandle = LoadLibrary("kernel32.dll"); parametros.KernelLoadLibrary = (LOADLIBRARY...// 调用的远程Shell代码 void __stdcall MyShell(PARAMETROS *ptr) { // 通过GetProcAddress获取到ws2.dll的所有函数地址 ptr...首先使用注入器注入一个正在运行的进程,参数为PID 使用NC直接连接进去,即可获取到,与注入进程相同的权限,端口写死了9999 如果目标进程开启了,动态地址,ASLR,等则注入会失败,程序崩溃,这里需要注意一下

    93630

    python调用dll文件接口

    ,stdcall调用约定和cdecl调用约定声明的导出函数,在使用python加载时使用的加载函数是不同的,后面会有说明)调用约定的导出函数Add。...像printf这样的函数,事先不知道需要的栈大小,需要用cdecl来处理 所以需要使用cdecl来调用   2、调用dll的方法 在1加载dll的时候会返回一个DLL对象(假设名字叫Objdll...看起来调用似乎很简单,不要只看表象,呵呵,这是因为Add这个函数太简单了,现在假设函数需要你传入一个int类型的指针(int*),可以通过库的byref关键字来实现,假设现在调用函数的第三个参数是个...,就是用C++调用win32 API来产生GUID,然后python通过调用C++写的dll来获得这个GUID。...kernel32.dll的createprocessA函数来启动一个记事本进程  [python] view plain copy #  -*- coding:utf-8 -*-

    5.5K40

    绝大部分测试和开发人员都不知道的DLL

    Kernel32.dll 它包含那些用于管理内存、进程和线程的函数,例如CreateThread函数; 2....名字改编和”extern “C”” C++编译器在生成DLL时,会对导出的函数进行名字改编,并且不同的编译器使用的改变规则不一样,因此改编后的名字会不一样。...但是利用限定符extern “C”可以解决C++和C之间相互调用函数命名的问题,但是这种方法有一个缺陷,就是不能用于导出一个类的成员函数,只能用于导出全局函数。 4....显示加载方式加载DLL 使用动态方式来加载动态链接库时,需要用到LoadLibrary函数。该函数的作用就是将指定的可执行模块映射到调用进程的地址空间。...也就是说在需要时才被加载到内存,并被映射到调用进程的地址控件。需要说明的是,隐式链接方式访问DLL时,在程序启动时也是通过LoadLibrary函数加载该进程需要的动态链接库的。 6.

    75720

    DLLOCX文件的注册与数据执行保护DEP

    其余两种情况,OptOut虽然是默认开启DEP,但它允许被关闭,所以这是一种可以抢救的情况,唯独AlwaysOn不可抢救,必须修改系统DEP策略并重启。...插播一下,系统默认的策略是OptIn,这种策略下普通程序的DEP是关闭的,但是系统程序例外,所以在程序调用regsvr32进行注册会失败,因为实际执行注册的进程是regsvr32而非自己的程序,而regsvr32...可以在任务管理器进程页面添加【数据执行保护】列,以呈现进程DEP的开闭情况。...,可以选择把c++组件装上,或搜单独的vc build tools装上。...说回DLL注册 上面说过如果是调用regsvr32来注册的,那就算搞掂程序的DEP也无济于事,需要考虑用regsvr32以外的办法进行注册,比如直接调用dll的DllRegisterServer函数,事实上

    1.2K20

    DLL 注入

    这篇文章的目的 这篇文章将介绍如何使用 LoadLibrary 执行基本的 dll 注入,然后深入探讨 LoadLibrary何在幕后工作,并完成手动映射和将 DLL 注入进程的步骤。...LoadLibrary 会将我们指定的模块(dll)加载到任何调用它的地址空间中,这就是为什么我们不能单独使用它,因为这只会将 dll 加载到我们的程序,而不是我们想要的程序中将我们的代码注入。...该函数接受包含函数的模块的句柄和函数的名称。LoadLibraryA 位于 kernel32.dll ,这就是我们获取该模块的原因。...这是必要的,因为我们需要调用 LoadLibrary 的路径,并且我们需要字符串在我们调用函数的进程。...一旦加载到内存,我们将遍历所有 thunk 并设置所有函数调用的地址。对于这一部分,我们将只使用 LoadLibrary,因为解析所有相对路径(KERNEL32 等)会很麻烦,而且有点不必要。

    4.9K00

    1.7 完善自定位ShellCode后门

    在之前的文章,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实现通过....dll模块的导出函数,所以我们可通过查找kernel32.dll的导出表来找到GetProcAddress函数的内存地址。...,该函数显然不在kernel32.dll模块内,它在Ws2_32.dll模块内,我们需要先调用call [ebp+80]也就是调用LoadLibrary加载ws2_32.dll模块获取该模块的基地址,接着在通过...call [ebp+76]调用获取该模块WSAStartup函数的基址,但读者需要注意的是,call [ebp+76]时需要压入两个参数,其中push edi带指的是ws2_32.dll的字符串,而push...在SEH链表存在一个默认异常处理函数UnhandledExceptionFilter当程序在执行期间遇到未处理的异常时,操作系统会调用UnhandledExceptionFilter函数来捕获该异常,

    19030

    1.7 完善自定位ShellCode后门

    在之前的文章,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实现通过...;AddressOfNames字段:指向模块中所有函数名称的数组;AddressOfNameOrdinals字段:指向AddressOfNames数组函数对应序数的数组;当读者需要在Kernel32....,该函数显然不在kernel32.dll模块内,它在Ws2_32.dll模块内,我们需要先调用call [ebp+80]也就是调用LoadLibrary加载ws2_32.dll模块获取该模块的基地址,接着在通过...,等待我们使用;#include #include int main(int argc, char *argv[]){ LoadLibrary("kernel32...在SEH链表存在一个默认异常处理函数UnhandledExceptionFilter当程序在执行期间遇到未处理的异常时,操作系统会调用UnhandledExceptionFilter函数来捕获该异常,

    21320

    进程注入1:通过LoadLibrary注入DLL

    进程可以使用该句柄在对GetProcAddress,FreeLibrary或FreeLibraryAndExitThread函数调用识别DLL 该的GetModuleHandle函数返回使用的手柄GetProcAddress...switch语句所示,它在4种情况下被调用: 1.DLL_PROCESS_ATTACH 由于进程启动或对LoadLibrary调用,DLL正在被加载到当前进程的虚拟地址空间中。...请注意,只有在进程加载DLL之后创建的线程才使用此值调用DLL的入口点函数使用LoadLibrary加载DLL时,现有线程不会调用新加载的DLL的入口点函数。...构造注入程序 LoadLibrary是Windows API的一个函数,它可以将一个DLL加载到调用进程和调用的内存DLLMain(将指定的模块加载到调用进程的地址空间中) 使用语法 C ++ HMODULE...6.一旦有了kernel32.dll的句柄,便可以通过GetProcAddress查找LoadLibrary的地址 7.CreateRemoteThread在目标进程创建一个新线程,该线程将使用有效负载的路径作为参数来调用

    2.4K30

    1.7 完善自定位ShellCode

    在之前的文章,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实现通过....dll模块的导出函数,所以我们可通过查找kernel32.dll的导出表来找到GetProcAddress函数的内存地址。...,该函数显然不在kernel32.dll模块内,它在Ws2_32.dll模块内,我们需要先调用call [ebp+80]也就是调用LoadLibrary加载ws2_32.dll模块获取该模块的基地址,接着在通过...call [ebp+76]调用获取该模块WSAStartup函数的基址,但读者需要注意的是,call [ebp+76]时需要压入两个参数,其中push edi带指的是ws2_32.dll的字符串,而push...在SEH链表存在一个默认异常处理函数UnhandledExceptionFilter当程序在执行期间遇到未处理的异常时,操作系统会调用UnhandledExceptionFilter函数来捕获该异常,

    18020
    领券