这是API参考的graphviz.我找不到任何从现有dot源文件生成有向图的方法.方法喜欢render并view保存在新文件中.
如何从现有dot代码中显示图表?
我一直在玩intel mpx,发现它添加了一些我无法理解的指令。例如(英特尔格式):
movsxd rdx,edx
Run Code Online (Sandbox Code Playgroud)
我发现了这个,它谈到了一个类似的指令 - MOVSX.
从那个问题,我对这条指令的解释是,它需要双字节(这就是为什么有din movsxd)并将其复制到rdx寄存器(在两个最低有效字节中)并用该双字节的符号填充其余部分。
我的解释是否正确(我认为我错了)?如果没有,你能告诉我发生了什么吗?
我正在尝试分析 QEMU tcg IR 代码
我看到这篇文章讨论了 QEMU 代码流程。根据该图,翻译发生在 target-xxx/translate.c,这就是 QEMU 将代码从源(或前端)翻译为 TCG IR 的地方。然后进一步在 tcg/xxx/tcg-target.c。
这个过程可以总结如下(至少根据我的理解) - 假设我们有x86一个前端和powerpc (ppc64abi32)一个后端,那么 -
x86--> TCG IR-->ppc64abi32
我想分析一下这段TCG IR代码。有什么方法可以生成此代码(这可能不相关,但例如,我们可以使用带有 clang 的标志 -S 生成 LLVM IR 代码)?
我自己做了一些研究,发现struct TranslationBlock(在文件 /include/exec/exec-all.h 中)这与 tcg IR 代码有关(所以,我尝试打印一些结构变量,但我不确定是否我正朝着正确的方向前进)。我还阅读了微型代码生成器自述文件,但找不到生成相关信息。
我有一些简单的代码(这是我拥有的较大代码的一个较小的示例):
#include <iostream>
#include <unordered_map>
#include <list>
// List of blocks
std::list<struct Block> Blocks;
class ObjInfo
{
private:
int size;
public:
ObjInfo(int size){this->size = size;}
int get_size() {return size;}
};
struct Block
{
// name of the block
int x;
// Actual variable stack
std::unordered_map <int, ObjInfo*> objinfostack;
};
int main()
{
int x = 2;
while( x >= 0 )
{
Block b;
b.x = x;
b.objinfostack.insert(std::make_pair(x, new ObjInfo(4)));
--x;
Blocks.push_front(b);
}
for(std::list<struct Block>::iterator i = Blocks.begin(); i!=Blocks.end(); ++i) …Run Code Online (Sandbox Code Playgroud) 这可能很愚蠢,但是对这些类型的指令有一个小疑问:
MOV EBX,dword ptr [RAX + 0x28]
Run Code Online (Sandbox Code Playgroud)
这会改变值RAX吗?就像是:
移动RAX + 0x28in中指向的值EBX,然后添加Add RAX, 0x28。简而言之,RAX此操作后的更改值是否合适?