草庐IT

IDA反汇编

全部标签

c++ - c++ by-ref参数传递如何在汇编中编译?

在大学后期,我有一门关于编译器的类(class)。我们为C的一个子集创建了一个编译器。我一直想知道在C++中如何将pass-by-ref函数调用编译成汇编。据我所知,传递值函数调用遵循以下过程:存储PP的地址将参数压入堆栈执行函数调用在函数中,从栈中弹出参数按引用传递有什么不同?(intvoid(int&);)编辑:我可能听起来完全迷失了,但如果你能帮助我,我将非常感激。大家的回答基本都是传地址,不传值。我明白这基本上就是传递指针的意思。那么,这两个函数的行为为何不同呢?:structA{intx;A(intv){x=v;}};intbyRef(A&v){v=A(3);return0;

c++ - 汇编中 64 位结果的最快阶乘实现

这不是作业,只是我想到的。所以,直接计算阶乘并不是很快;记忆化会有帮助,但如果结果适合32位或64位,则阶乘仅适用于输入0到12和20分别。所以……我们不妨使用一个查找表:nn!01112236424512067207504084032093628801036288001139916800124790016001362270208002^32=42949672961487178291200151.30767E+12162.09228E+13173.55687E+14186.40237E+15191.21645E+17202.4329E+182^64=1.84467E+19因此,假设我想

c++ - C++函数模板在汇编中是如何实现的?

我正在尝试使用汇编代码——具体来说是ARMv7-a来实现C++函数。现在遇到一个不知道C++函数模板应该怎样的程序在汇编中实现。我尝试使用-S-O1标志编译源代码以查看生成的程序集但无法理解。谁能给我一个简短的想法C++模板是否被翻译成汇编代码?只需使用以下简单功能举个例子:templateTf(Ta){returna+1;}如果您发现任何其他功能更容易解释,请这样做。谢谢! 最佳答案 正确措辞会有所帮助。这不是模板函数,它是函数模板...注意到区别了吗?模板,就是在实例化时生成代码。所以在这种情况下,如果您为int实例化您的f程序

c++ - GDB - 神秘的汇编代码是什么?

Dumpofassemblercodeforfunctionmain:0x0804833e:push%ebp0x0804833f:mov%esp,%ebp0x08048341:sub$0x8,%esp0x08048344:and$0xfffffff0,%esp0x08048347:mov$0x0,%eax0x0804834c:add$0xf,%eax0x0804834f:add$0xf,%eax0x08048352:shr$0x4,%eax0x08048355:shl$0x4,%eax0x08048358:sub%eax,%esp=>0x0804835a:movl$0x10,-0x4(

c++ - 在 C++ 中嵌入汇编器可以接受吗?

如果您正在编写一个对延迟非常敏感的应用程序,那么在C++函数中嵌入汇编程序(并正常使用C++函数调用)的限制是什么,如下所示:inline__int64GetCpuClocks(){//Counterstruct{int32low,high;}counter;//UseRDTSCinstructiontogetclockscount__asmpushEAX__asmpushEDX__asm__emit0fh__asm__emit031h//RDTSC__asmmovcounter.low,EAX__asmmovcounter.high,EDX__asmpopEDX__asmpopEAX

c++ - 一种为特定内联函数强制汇编列表的方法,更好的方法?

我需要能够使用GCC查看特定函数的汇编输出。我使用-S,但有时如果函数是内联的,则不会输出该函数的单独汇编代码。我不想完全阻止内联,因为我也在做性能基准测试,我想为此进行内联。我知道选项-fkeep-inline-functions,但遗憾的是这适用于每个函数,我不想让我的汇编输出文件膨胀包含数千行标准库汇编代码。我确实发现,如果您使用函数的地址,它不会从汇编输出中优化。知道这一点后,我一起破解了以下宏:#defineDONT_OPT_OUT_CONCAT1(a,b)DONT_OPT_OUT_CONCAT2(a,b)#defineDONT_OPT_OUT_CONCAT2(a,b)a##

c++ - GCC 内联汇编中的一个简单的 while 循环

我想使用GCC扩展内联ASM编写以下循环:long*arr=newlong[ARR_LEN]();long*act_ptr=arr;long*end_ptr=arr+ARR_LEN;while(act_ptr一个长度为ARR_LEN的long类型的数组被分配并初始化为零。循环遍历数组,增量为STEP_SIZE。每个触摸的元素都设置为SOME_VALUE。好吧,这是我在GAS中的第一次尝试:long*arr=newlong[ARR_LEN]();asmvolatile("loop:""movl%[sval],(%[aptr]);""leal(%[aptr],%[incr],4),%[ap

c++ - 如何将 C++ 子例程链接到 x86 汇编程序?

我正在尝试制作一个打印“Hello!”的简单汇编程序。一次,等待一秒钟,然后再次打印。由于sleep函数在汇编中相对复杂,而且我不太擅长,所以我决定使用C++来制作Sleep子例程。这是C++程序://Sleep.cpp#include#includevoidSleep(intTimeMs){std::this_thread::sleep_for(std::chrono::milliseconds(TimeMs));}然后我使用“gcc-SSleep.cpp”将这个sleep函数编译成一个汇编程序,然后使用“gcc-cSleep.s”将它编译成一个目标文件我正在尝试从程序集调用此C++

c++ - 在 gcc 编译器中使用 bts 汇编指令

我想使用bts和btx86汇编指令来加速我在Mac上的C++代码中的位操作。在Windows上,_bittestandset和_bittest内部函数运行良好,并提供显着的性能提升。在Mac上,gcc编译器似乎不支持这些,所以我尝试直接在汇编程序中进行。这是我的C++代码(请注意,“位”可以>=32):typedefunsignedlongLongWord;#defineDivLongWord(w)((unsigned)w>>5)#defineModLongWord(w)((unsigned)w&(32-1))inlinevoidSetBit(LongWordarray[],const

php - 如何将汇编代码嵌入到php中?

我想使用汇编代码来处理一些与使用PHP的性能有关的关键任务。我怎样才能做到这一点?我之前搜索过,但一无所获。 最佳答案 我相信您在谈论扩展PHP。您可以通过用C语言创建自定义扩展来做到这一点。您会找到一个关于如何操作的简单教程here 关于php-如何将汇编代码嵌入到php中?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/19512762/