首页 > 解决方案 > 尝试从顶点开始 (C)

问题描述

今天我尝试从 capstone 开始,因为有人告诉我这对查找交叉引用(通过 64 位 ARM(小端)引导加载程序)很有帮助,但经过多次尝试,我似乎无法理解在他们所有的例子中;(

例如,我试图调整他们的基本示例:

int main(char *argv[]) {
  FILE *f;
  csh handle;
  cs_insn *insn;
  size_t count;
  int len = 0;
  char *file = NULL;

  f = fopen(argv[1], "rb");

  if (!fd) {
    return -1;
  }

  fseek(f,0,SEEK_END);
  len = ftell(f);
  fseek(f,0,SEEK_SET);
  file = malloc(len);
  fread(file,1,len,f);
    
  fflush(f);
  fclose(f);

  if (cs_open(CS_ARCH_ARM64,CS_MODE_LITTLE_ENDIAN,&handle) != CS_ERR_OK) 
    return -1;
  count = cs_disasm(handle,file,len-1,0x11DA,0,&insn);

  if (count > 0) {
    size_t j;
    for (j = 0; j < count; j++) {
      printf("0x%"PRIx64":\t%s\t\t%s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str);
    }
    cs_free(insn, count);
  } else {
    printf("ERROR: Failed to disassemble given code!\n");
  }
  cs_close(&handle);
  free(file);

  return 0;
}

但我没有得到我期望的结果(比如,0x11DA偏移量应该是一条mov指令,但在那里,它输出一条指令,adrp所以我认为我错过了一些东西......)

有人可以解释我如何找到与顶点的交叉引用,或者如果没有,至少有一个很好地介绍它的链接?

(如果您不了解所有内容,请提前道歉)。

谢谢。

标签: creverse-engineering

解决方案


推荐阅读