NJU-ProjectN / nemu

NJU EMUlator, a full system x86/mips32/riscv32/riscv64 emulator for teaching
Other
858 stars 184 forks source link

一个其他的反汇编方案 #102

Closed Crypeter closed 1 month ago

Crypeter commented 1 month ago

以龙芯为例,依赖于对应工具链的objdump

FILE *code_bin = fopen("/tmp/code.bin","wb");
fwrite(inst,sizeof(char),4,code_bin);
fclose(code_bin);
char *objdump_cmd = "loongarch32r-linux-gnusf-objdump -D -b binary /tmp/code.bin -m loongarch64 \
                 | grep '^[[:space:]]\\+[0-9a-f]\\+:[[:space:]]\\+[0-9a-f]\\+' \
                 | sed -E 's/^[[:space:]]+[0-9a-f]+:[[:space:]]+[0-9a-f ]+//g' ";
FILE *pipe = popen(objdump_cmd,"r");
int n = fread(p,sizeof(char),s->logbuf + sizeof(s->logbuf) - p,pipe);
p[n - 1] = '\0';
pclose(pipe);
yifeianyi commented 1 month ago

试了下,nemu的速度感觉没慢太多,效果不错。

yifeianyi commented 1 month ago
#if defined(__ISA_X86__)
    char *ARCH_OBJDUMP = "i386-linux-gnu-objdump";
    char *obj_arch = "i386";
#elif defined(__ISA_MIPS32__)
    char *ARCH_OBJDUMP = "mips-linux-gnu-objdump";
    char *obj_arch = "mips";
#elif defined(__ISA_RISCV32__) 
    char *ARCH_OBJDUMP = "riscv32-unknown-elf-objdump";
    char *obj_arch = "riscv:rv32";
#elif defined(__ISA_RISCV64__)
    char *ARCH_OBJDUMP = "riscv64-unknown-elf-objdump";
    char *obj_arch = "riscv:rv64";
#elif defined(__ISA_LOONGARCH32R__)
    char *ARCH_OBJDUMP = "loongarch32r-linux-gnusf-objdump";
    char *obj_arch = "loongarch32";
#elif
# error unsupported ISA __ISA__
#endif

FILE *code_bin = fopen("/tmp/code.bin","wb");
fwrite(inst,sizeof(char),4,code_bin);
fclose(code_bin);
char objdump_cmd[512];
snprintf(objdump_cmd, sizeof(objdump_cmd),
    "%s -D -b binary /tmp/code.bin -m %s \
    | grep '^[[:space:]]\\+[0-9a-f]\\+:[[:space:]]\\+[0-9a-f]\\+' \
    | sed -E 's/^[[:space:]]+[0-9a-f]+:[[:space:]]+[0-9a-f ]+//g' ",
    ARCH_OBJDUMP, obj_arch);

FILE *pipe = popen(objdump_cmd,"r");
int n = fread(p,sizeof(char),s->logbuf + sizeof(s->logbuf) - p,pipe);
p[n - 1] = '\0';
pclose(pipe);
sashimi-yzh commented 1 month ago

试了下,nemu的速度感觉没慢太多,效果不错。

请问可以提供一下性能数据吗?

yifeianyi commented 1 month ago

试了下,nemu的速度感觉没慢太多,效果不错。

请问可以提供一下性能数据吗?

刚跑了下microbench,连test都很难跑出结果。昨天简单测试了几个cpu test,感觉性能差在可接受范围。实测发现,该方案不太现实。

sashimi-yzh commented 1 month ago

感谢测试, 由于效果不佳, 这个issue先关闭了.