草庐IT

IDA汇编

全部标签

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录使用gcc/g++gcc如何完成编译后生成可执行文件?预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件)最后记忆小技巧在这里涉及到一个重要的概念:函数库静态库和动态库两种区分win和linux的动静态库后缀动态链接的优缺点安装C语言的静态库gcc的选项使用gcc/g++首先检查自己的linux机器有没有安装gcc--version没有安装的话执行下面命令以安装gcc和g++sudoyuminstall-ygcc-c++CentOS7默认匹配的gcc版本是4.8gcc是一个专门用来编译链接C语言的编译器,而g++是一个专门用来编译链接C++的编译

c++ - GCC 内联汇编错误 : Cannot take the address of 'this' , 这是一个右值表达式

我仍在与GCC作斗争-编译以下内联汇编代码(使用-fasm-blocks,启用Intel风格汇编syntax)给我一个奇怪的错误Cannottaketheaddressof'this',whichisanrvalueexpression...MyClass::MyFunction(){_asm{//...movebx,this//error:Cannottaketheaddressof'this',whichisanrvalueexpression//...moveax,this//error:Cannottaketheaddressof'this',whichisanrvalueex

如何访问汇编x86中的2D数组

如何在组装中使用2D数组?我宣布intarray[100][2]在C中,我想访问array[4][0]在组装中看答案在C中,array[i][j]是相同的:*(*(array+i)+j)当您在C中添加指针时,它会自动考虑指向的类型的大小。在集会中不是这种情况,因此您必须自己做。基本公式只是:(offsetof(array)+(sizeof(int)*i))+(sizeof(int)*j)自int几乎可以肯定的是4个字节,大会等同于:inttemp=array[4][0];将会:moveax,DWORDPTR[array+16]因为(4*4)+(0*4)==16。

c++ - 内联汇编程序调用子程序

我对内联汇编程序有疑问。可以在同一个函数中从内联汇编程序调用另一个汇编程序子例程吗?例如:voidFindValidPID(unsignedint&Pid){__asm{subesp,20hmoveax,Pidaddeax,eaxcallsub123;anotherassmsubroutinemovPid,eaxaddesp,20h}}我应该在哪里以及如何编写子例程sub123?干杯,托马斯 最佳答案 如果您在汇编中编写整个子例程,您应该考虑使用文件级汇编器而不是内联。 关于c++-内联

c++ - 如何从汇编代码中找出函数原型(prototype)?

我有一些汇编代码,我想找出调用函数的原型(prototype),以便我可以从C++代码中调用所有函数。我真正想做的是将一个dll注入(inject)到正在运行的进程中,并从我的dll中调用正在运行的进程的函数。现在我已经成功注入(inject)了我的dll但不知道如何进行“调用”。我是新手,对汇编代码了解不多。我的dll是用visualc++2012编写的。这是运行过程的代码:CPUDisasmAddressHexdumpCommandComments6013BE24/$53PUSHEBX6013BE25|.8B1D10461860MOVEBX,DWORDPTRDS:[60184610

c++ - 检索 x64 masm 汇编过程的参数

我有一个带有签名的函数:extern"C"intfoo(inta,intb,intc,intd,inte);实际上是用汇编写的。使用ml(32位),使用标准调用约定,您几乎可以编写.codefooPROCa:DWORD,b:DWORD,c:DWORD,d:DWORD,e:DWORDmoveax,dmovebx,e并开始使用这些标签来访问您的论点对于ml64(64位),fastcall是唯一可用的约定。我可以毫无问题地访问存储在寄存器中的第一个参数,但访问堆栈中的参数时会出现问题(本例中为e):我试过了.codefooPROCa:DWORD,b:DWORD,c:DWORD,d:DWORD

c++ - 如何查看Code::Blocks中的反汇编?

我读了thisarticle关于C/C++的一些底层基础,作者基本上是通过编译器生成的汇编代码逐行向我们展示。他用的是VS2010,我不用,我用的是Code::Blocks。我如何查看那里的反汇编?当我转到调试器并单击反汇编时,它会显示一个空白窗口...这是我编译的C++(.cpp)代码(完整代码):intmain(){intx=1;inty=2;intz=0;z=x+y;return0;} 最佳答案 作者在文章中展示的反汇编称为inter-leaveddisassembly(C和反汇编交错),VisualStudio等一些IDE支

c++ - 反汇编多重继承中的虚拟方法。 vtable 是如何工作的?

假设以下C++源文件:#includeclassBaseTest{public:inta;BaseTest():a(2){}virtualintgB(){returna;};};classSubTest:publicBaseTest{public:intb;SubTest():b(4){}};classTriTest:publicBaseTest{public:intc;TriTest():c(42){}};classEvilTest:publicSubTest,publicTriTest{public:virtualintgB(){returnb;}};intmain(){EvilT

c++ - 汇编代码的数据结构? [研究]

我打算创建一个优化的数据结构来保存汇编代码。这样我就可以完全负责将在这个结构上工作的优化算法。如果我可以边运行边编译。这将是一种动态执行。这可能吗?有没有人见过这样的事情?我应该使用结构将结构链接到程序流中吗?对象更好吗?structasm_code{inttype;intvalue;intoptimized;asm_code*next_to_execute;}asm_imp;更新:我想它会变成一个链表。更新:我知道还有其他编译器。但这是军方的绝密项目。所以我们不能相信任何代码。我们必须自己做这一切。更新:好的,我想我会生成基本的i386机器代码。但是当它完成时我如何跳入我的内存blo

c++ - 如何反汇编 Pro*C/C++ 程序?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion有没有办法反汇编Pro*C/C++可执行文件?