草庐IT

C++ Hook 我自己的程序函数

所以我想分析我的应用程序,我特别想记录从程序开始到程序内部调用的每个函数(忽略DLL中的函数)进入和退出的时间,即我想要一个简单的表看起来像这样:THREAD_IDFUNCTION_ADDRESSTIMEEVENT_TYPE55200xFF4353600ENTERED55200xFF435ED325ENTERED55200xFF43355040ENTERED55200xFF43355050EXITED55200xFF43355060ENTERED55200xFF43355070EXITED55200xFF435ED382EXITED55200xFF43536090EXITED对于这样一

c++ - 如何使 Boost dylibs 在 os x 上通用(i386 和 x86_64)?

我正在尝试将Boost库编译成通用二进制文件(即包含i386和x86_64架构构建的“胖”文件)。破坏互联网和SO我组装了以下说明。下载boost(例如来自http://www.boost.org/users/download/)在下载的文件夹中,输入./bootstrap.sh(或者,在我的例子中./bootstrap.sh--with-libraries=thread,因为我只需要线程库)键入./b2installcxxflags="-archi386-archx86"这些步骤将Boost线程库安装到/usr/local/lib/(它的标准位置)。生成的静态库是一个通用二进制文件。

c++ - 错误 : Undefined symbols for architecture x86_64 with classes

我是一名初学者,正在编写一个帮助我节食的有趣程序。该程序尚未完成,但在我编写时正在编译。我不断收到标题中提到的错误:Undefinedsymbolsforarchitecturex86_64withclasses我看过类似的问题,但它们都与模板和继承类有关,这与我的情况不同。我只是在宣布一个类(class),没什么特别的。我认为这与未正确定义类有关,但我无法弄清楚它是什么。这可能是我想念的愚蠢的东西,但我仍然被困住了。谢谢。#include#includeusingnamespacestd;classMeal{private:stringname;intprotein;intcarbs

c++ - %ld 格式转换以实现便携性

在添加对Linux64的支持之前,这很容易。几乎所有数据都被声明为int或来自BYTE、WORD和DWORD的类型定义:typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefunsignedlongDWORD;添加64位gcc支持后,DWORD需要稍微调整以保持32位值,因为它代表存储的数据://tocompileDWORDsas32bitson64-bitmachines:#if__x86_64__typedefunsignedintDWORD;#elsetypedefunsignedlongDWORD;#endif这在所有环

c++ - 升级到 OS X Mavericks 后架构 x86_64 的 OpenCV undefined symbol

我有一个运行良好的opencv项目。今天我已经将我的OSXlion升级到Maverick,我收到以下imwrite函数的错误:Undefinedsymbolsforarchitecturex86_64:"cv::imwrite(std::__1::basic_string,std::__1::allocator>const&,cv::_InputArrayconst&,std::__1::vector>const&)",referencedfrom:_maininHello.old:symbol(s)notfoundforarchitecturex86_64我不得不说其他opencv函

c++ - x86 上简单循环中的慢速指令

我有一个用C++编写的简单循环,因为我想分析乘法指令在我的CPU上的性能。我在分析它时生成的汇编代码中发现了一些有趣的细微差别。这是C++程序:#defineTESTS10000000#defineBUFSIZE1000uint32_tbuf_in1[BUFSIZE];uint32_tbuf_in2[BUFSIZE];uint32_tvolatilebuf_out[BUFSIZE];unsignedinti,j;for(i=0;i我使用以下标志编译:优化:代码生成:虽然我在64位机器上运行它,但它是在Win32下的visualstudio2012中编译的。注意buf_out上的vola

c++ - 将打包的半字节组合成打包的字节

给定一个或多个__m128i或__m256i每个16位元素包含一个半字节,将它们组合并打包为每个8位元素一个字节的最快方法是什么(即(hi用于相邻的16位元素)?这是我想出的最好的方法,不幸的是,它与标量代码相当:conststatic__m256ishufmask=_mm256_setr_epi8(2,255,255,255,6,255,255,255,10,255,255,255,14,255,255,255,2,255,255,255,6,255,255,255,10,255,255,255,14,255,255,255);conststatic__m256ihigh4=_mm2

c++ - 在彼此非常接近的范围内混合二进制数据和指令是否有缓存惩罚?

我在程序上生成128字节的block,其中包含一些为机器语言函数保留的n字节header,我只是通过内联汇编调用这些函数。它们没有在任何地方定义,而是在运行时生成到分配到内存中的页面中,可以访问执行。但是,我想保留这些block的末尾(128-n)字节用于存储在这些函数中使用的数据,因为能够将内存偏移调用缩小到8位而不是32位,并且(可能?)帮助缓存。但是,我担心的是缓存。假设我有一个处理器,它既有数据缓存又有指令缓存,这种典型的处理器处理这种格式的效果如何?它会尝试在我的指令之后将数据作为指令本身加载到指令缓存中吗?这是否会导致显着的性能损失,因为处理器试图弄清楚如何处理这些垃圾和可

c++ - 是否可以使用 Windows API 分配段?

我想知道Windows程序是否可以在进程的本地描述符表中分配一个段描述符。是否有WindowsAPI函数可以使用提供的线性偏移量、段长度和标志组合(RWX)将新的段描述符安装到正在运行的进程的LDT? 最佳答案 可以使用未记录的NTAPI,特别是NtSetLdtEntries。请注意,Windowsx86-64不会设置LDT,因此这仅适用于x86。Here's一些代码。 关于c++-是否可以使用WindowsAPI分配段?,我们在StackOverflow上找到一个类似的问题:

c++ - 适用于 x86/64 的 Itanium 交叉编译器

我需要为Itanium编译我的代码,但似乎所有编译器(ecc、gcc、orc)都需要Itanium机器来执行此操作。有什么建议吗? 最佳答案 您需要将gcc设置为交叉编译器。这涉及到自己构建binutils和gcc。IA64wiki位于http://www.gelato.unsw.edu.au/IA64wiki/CrossCompilation有一个关于如何设置它的教程。 关于c++-适用于x86/64的Itanium交叉编译器,我们在StackOverflow上找到一个类似的问题: