目标代码,机器代码和汇编代码之间有什么区别?
你能举出他们差异的视觉例子吗?
我一直在使用objdumpLinux ELF二进制文件中的汇编代码.
有时会通过存储在rodata(只读数据)部分中的跳转表进行间接跳转.
如何获取objdump或任何其他工具向我显示此数据部分的内容?
我可以执行程序并检查调试器中的相关地址,但我不想这样做,因为它必须以交互方式完成.
理想的答案将确定一个工具,不仅可以向我显示内容,还可以让我控制显示格式od.
我是编程新手,我从C++语言开始,据我所知,C++编译器将C++语言转换为汇编语言(例如:Visual Studio),但我试着查找将汇编语言转换为机器代码的内容.由计算机理解和执行,但我找不到答案.
所以问题是汇编语言在何处以及如何转换为机器码?它是由OS中集成的某种编译器吗?
提前致谢.
我创建了CCSprite并将其添加到主视图中.然后我想看到精灵图像,所以我把它保存到PNG但是很多都没有正确保存.只显示白色背景.我不知道原因,也发现了谷歌的一些文章,但他们根本没有帮助我.我怎么解决这个问题?
CCSprite *sprite = [[CCSprite spriteWithFile:[NSString stringWithUTF8String:name] rect:CGRectMake(startx, starty, w, h)] retain];
float drawX = x, drawY = y;
CGSize size = [sprite contentSize];
int nWidth = size.width;
int nHeight = size.height;
nWidth *= scale;
nHeight *= scale;
drawX = drawX + nWidth/2;
drawY = drawY - nHeight/2;
ConvertCoordf(&drawX, &drawY);
drawY -= nHeight;
[sprite setScale:scale];
[sprite setPosition:ccp(drawX, drawY)];
[_mainLayer addChild:sprite];
CCRenderTexture* render = [CCRenderTexture renderTextureWithWidth:sprite.contentSize.width height:sprite.contentSize.height];
[render begin];
[sprite visit];
[render end];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory …Run Code Online (Sandbox Code Playgroud) 有什么影响
我想用LLVM编译一个玩具语言,因为已经存在所有的硬件(优化,目标代码生成),但是如果值得的话,我想要保留一个概念:库文件应该是可再发行,可用作静态和共享库(用于链接,在共享情况下,当最终应用程序链接时将生成真实的或者dll),可移植.我相信这会减少部分编译时间(因为本机代码生成和优化只能在最终二进制链接时完成一次).我设想链接器负责调用约定(如果可能)以及如果请求转换到共享库.在远伸此外,或许LLVM可以被利用来不链接,并使用LLVM JIT直接运行生成的字节码,在编写代码时完全删除链接倍.
这听起来不错
/GL,并-flto因为这将是基本LLVM字节码连接到一起,然后将变成一个本地二进制).这可能是一个模糊的问题,如果我必须澄清一些问题,请询问.
如果您在计算机输出中考虑了特定的C代码行,那么如何在objdump输出中找到它.这是一个例子
if (cond)
foo;
bar();
Run Code Online (Sandbox Code Playgroud)
我想看看栏是否按照我的意愿内联.或者你会使用一些替代工具而不是objdump?
我已经pow用C中传统的声明方式声明了函数。但是,函数的输出是不正确的。我不需要在此处包含 math.h,因为我正在声明该函数并且它的目标代码已经存在。这是我的代码:
#include<stdio.h>
double pow(); //traditional declaration doesnt work, why??
int main()
{
printf("pow(2, 3) = %g", pow(2, 3));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的输出是 1,而它应该是 8。请帮助我。
我正处于一个级别的中间,我正在为我的计算机考试做一些修改.我想知道是否有人能告诉我机器代码和目标代码之间的区别.
请保持简单.
我已经编码了 5 年多了,现在想远离 IDE,尝试一个没有 IDE 的项目。我有开始所需的东西(我认为),一个 HelloWorld.cpp 文件,打开的 Windows 命令提示符并安装了 Clang。
现在我有了这些东西,我的问题是 - 我需要在命令提示符中输入什么才能使 Clang 获取 HelloWorld.cpp 文件中的 C++ 代码并将其编译成包含 的单独文件assembly code,然后使 Clang 获取我的汇编代码并将其汇编成一个包含 的单独文件object code,然后最后让 Clang 获取我的目标代码并将其链接machine code到一个包含?的单独文件中。
最终意味着最后我将有 4 个文件,一个包含 C++ 代码,一个包含汇编代码,一个包含目标代码,最后一个包含机器代码。所有这一切的要点是能够在运行包含机器代码的文件之前读取和理解流程的每个阶段。
作为第一次离开 IDE 世界的人,我发现 Clang 官方文档非常混乱,无法找到我的问题的直接答案。
好吧,我正在为我正在开发的操作系统编写一个汇编程序。它进展顺利,我已经掌握了所有 mov 指令,现在我想实现 call 和 jmp 等指令。我确实没有好的文档,所以我正在查看 NASM 生成的机器代码来查找操作码等。我想看看调用的操作码是什么,所以我编译了一些以标签开头的代码。我预计调用操作码后的地址是 00 00 00 00,但它是 FB FF FF FF。我认为这与符号有关,因此我使用 call 0x000000 编译代码以查看发生了什么,并且地址完全相同(0xFBFFFFFF)。有人可以向我解释一下吗,我很困惑。
object-code ×10
assembly ×4
machine-code ×4
c ×2
objdump ×2
c++ ×1
call ×1
ccsprite ×1
clang ×1
elf ×1
execution ×1
gcc ×1
header-files ×1
high-level ×1
ios4 ×1
linker ×1
linux ×1
llvm ×1
stdout ×1