草庐IT

C++:在指针集中查找

全部标签

windows - 如何在 DLL 中查找特定指令的内存地址

如何找到特定指令的内存地址(用于编写漏洞利用程序)?具体来说,我正在寻找user32.dll中的callebp指令,在没有ServicePack的WindowsXP上,我可以指向其地址EIP到。我有两个ImmunityDebugger和OllyDBG安装在目标上。 最佳答案 要找到一条指令,您需要找出代码、.text、部分的开始和结束位置,然后加载DLL并进行线性搜索,直到找到该指令。这里我们有一个测试DLL,它有两条callebp指令://test.c//gcc-Wall-sharedtest.c-otest.dll#includ

windows - GNU sed - 查找或替换空格或新行。为什么这不起作用? v3.02 与 v4.2

C:\crp\cnp>sed-VGNUsedversion3.02Copyright(C)1998FreeSoftwareFoundation,Inc.......C:\crp\cnp>typef.faaaaaa尝试用空格替换'a'。C:\crp\cnp>typef.f|sed-es/a/\d032/gd032d032d032d032d032d032为什么它不起作用?我不介意我是在查找还是替换空格或换行。我只是想能够指定它们。它似乎不起作用,我也不知道为什么。(用f替换空格或空格不起作用)C:\crp\cnp>echoaa|seds/\d32/f/aa注意-它似乎可以在4.2中工作,但

windows - cmake 在 Windows 上查找 sqlite3 库

让CMake在Windows7(如果重要的话是64位)上找到sqlite3.dll库,我遇到的麻烦比我预期的要多。我已经下载并放置了最新的sqlite3.dll和sqlite3.def文件到C:\Windows\System32。我正在使用下面的FindSqlite3.cmake模块:IF(SQLITE3_INCLUDE_DIRANDSQLITE3_LIBRARY_RELEASEANDSQLITE3_LIBRARY_DEBUG)SET(SQLITE3_FIND_QUIETLYTRUE)ENDIF(SQLITE3_INCLUDE_DIRANDSQLITE3_LIBRARY_RELEASE

c++ - 在 ATL 项目中将 NULL 指针传递给进程外 COM 方法的正确方法

在ATL项目中将NULL指针传递给进程外COM方法的正确方法是什么?我创建了一个通过COM代理托管的COM服务器如果这很重要,我使用的是在Win7上运行的VS2012。服务器项目编译为64位,客户端项目编译为32位IDL看起来类似于下面import"oaidl.idl";import"ocidl.idl";[object,uuid(37EFA952-7036-4398-93A6-6CDAD9DFC005),dual,nonextensible,pointer_default(unique)]interfaceIGame:IDispatch{[id(1)]HRESULTpassNull(

c++ - cmake 找不到 boost 库,因为它查找了错误的文件名

我根据文档在Windows(8.1)机器上构建了boost(1.56)库,包括共享库和静态库。它们都以以下文件名格式出现在BOOST_ROOT/stage/lib目录中:boost_thread-vc120-mt-1_56.dllboost_thread-vc120-mt-1_56.libboost_thread-vc120-mt-gd-1_56.dllboost_thread-vc120-mt-gd-1_56.lib(这只是线程库,所有其他库也使用相同的格式)当我运行cmake时,它​​会提示无法找到boost库。使用-DBoost_DEBUG=ON运行它显示它查找不同的文件名:li

c++ - 指向动态分配数组的静态指针

所以这个问题比较直截了当,我有几个半大型查找表~500kb一张。现在,这些完全相同的表被几个类实例化(可能很多)使用,考虑到这一点,我不想在每个类中存储相同的表。所以我可以将整个表作为“静态”成员转储到堆栈中,或者我可以有指向这些表的“静态”指针。在任何一种情况下,该类的构造函数都会检查它们是否已初始化,如果没有则进行初始化。但是,我的问题是,如果我选择指向表的静态指针(以免滥用堆栈空间),什么是适当清理这些表的好方法。另请注意,我考虑过使用boost::share_ptr,但选择不使用,这是一个非常小的项目,我不打算添加任何依赖项。谢谢 最佳答案

c++ - 如何查找给定应用程序是否为单实例?

我正在寻找一种有效的方法来确定给定的应用程序(比如app.exe)是否是单实例?我想到了以下这些sol:执行两次CreateProcess()并检查该应用程序是否有两个或更多实例在运行?如果不是,则为单实例应用程序。但是,这效率不高。执行CreateProcess()并等待1-2秒。如果这个实例被杀死(因为已经有一个实例在为它运行),它将是单实例应用程序。但我对以上两个sol都不满意。在Windows中还有其他有效的方法吗?请注意,我不会终止该应用程序的已运行(如果有)实例或对其进行任何修改。 最佳答案 换个角度想:你写程序的时候,

windows - 查找Windows操作系统版本的VB6代码

我正在使用OSVERSIONINFO检查我的vb6应用程序中的操作系统。但我无法区分Windows7和WindowsServer2008R2,因为它们具有相同的版本号、dwMajorVersion和dwMinorVersion。那么如何区分这些。我认为可以使用其他方法在vb.net中完成。但是如何在vb6中完成呢? 最佳答案 正如Xearinox在上述评论中指出的那样,OSVERSIONINFOEX返回更多信息。特别是,您可以检查wProductType以确定是否设置了VER_NT_WORKSTATION(0x0000001)。如果

c++ - 是否可以从 stdin 输入指向指针的地址?

不久前,我有了一些简单的进程间通信的想法:一个进程将地址输出到一个指针,我将其复制到另一个进程的输入,然后更改原始变量。我是这样实现的:#include#includeusingnamespacestd;intmain(){boolp;cin>>p;if(p){intn;n=0;cout>n;*point+=n;}return0;}我使用scanf是因为cin提示并且无法编译。我尝试用两个进程运行它,但在我启动第二个实例并输入指针的地址(如第一个实例输出的那样)后,它卡住了。因为我只能访问Windows,所以我不知道它是否有SIGSEGV,或者它是否做了一些完全不同的事情。是我试图更改

windows - 在 for 循环中查找和替换 [批处理脚本]

下面的代码有效,echotest.testsetreplaceWith=.setstr="test\test"callsetstr=%%str:\=%replaceWith%%%echo%str%但是,下面的代码一直回显ggg.hhhhh4次。SETSERVICE_LIST=(aaa\bbbccc\ddddeeee\fffffggg\hhhhh)for%%iin%SERVICE_LIST%do(setreplaceWith=.setstr="%%i"callsetstr=%%str:\=%replaceWith%%%echo%str%)我在这里做错了什么?