Skip to content

部分函数优化结果残缺不全 #70

@CubeFeng

Description

@CubeFeng

问题描述

在使用 LLM4Decompile 对目标二进制中的函数进行反编译与优化时,部分函数的输出结果存在内容缺失或结构不完整的问题。
具体表现:函数体中关键逻辑被截断、无限声明变量等现象。

环境信息

大模型版本:llm4decompile-1.3b-v2

受硬件限制,暂无法使用 6.7B 或其他版本验证。

代码片段

vllm_kwargs = {
    "model": self.config.model_path,
    "dtype": torch.float16,
    "gpu_memory_utilization": 0.9,
    "max_model_len": 8192,
    "trust_remote_code": True,
    "max_num_seqs": 1,
}

llm = LLM(**vllm_kwargs)

sampling_params = SamplingParams(
    temperature=0.0,
    max_tokens=4048
)

outputs = llm.generate(batch_prompts, sampling_params)

输入

// Function: FUN_00bb2e00
void FUN_00bb2e00(long param_1,undefined8 *param_2)

{
  undefined4 uVar1;
  long lVar2;
  long lVar3;
  undefined8 uVar4;
  ushort uVar5;
  int iVar6;
  undefined8 uVar7;
  long in_FS_OFFSET;
  undefined8 local_58;
  undefined8 uStack_50;
  undefined8 local_48;
  undefined4 local_40;
  long local_30;
  
  lVar2 = *(long *)(param_1 + -0x10);
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  iVar6 = FUN_01f876c0(*(long *)(param_1 + -8) + 0x68);
  if (iVar6 != 0) {
    if (param_2 == (undefined8 *)0x0) {
LAB_00bb2e5a:
      FUN_00b96590(&DAT_02ea7e6c,0x575,"fnbamd_rad_dns_cb",1,"Failed in DNS resolving %s",
                   *(long *)(param_1 + -8) + 0x28);
    }
    else {
      iVar6 = FUN_01f876c0(param_2);
      if (iVar6 != 0) goto LAB_00bb2e5a;
      uVar7 = FUN_01f87450(param_2);
      FUN_00b96590(&DAT_02ea7e6c,0x579,"fnbamd_rad_dns_cb",4,"%s->%s",*(long *)(param_1 + -8) + 0x28
                  );
      lVar3 = *(long *)(param_1 + -8);
      uVar4 = param_2[1];
      *(undefined8 *)(lVar3 + 0x68) = *param_2;
      *(undefined8 *)(lVar3 + 0x70) = uVar4;
      *(undefined8 *)(lVar3 + 0x78) = param_2[2];
      uVar1 = *(undefined4 *)(param_2 + 3);
      *(undefined4 *)(lVar3 + 0x80) = uVar1;
      uVar5 = FUN_00b8fa10(*(undefined8 *)(param_1 + -8),0xbb2f20,uVar1,uVar7);
      *(ushort *)(*(long *)(param_1 + -8) + 0x6a) = uVar5 << 8 | uVar5 >> 8;
      iVar6 = FUN_00bb2af0(param_1 + -0x45e8);
      if (iVar6 == 0) {
        if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
          FUN_00b974e0(param_1);
          return;
        }
        goto LAB_00bb2ff8;
      }
    }
    lVar3 = *(long *)(param_1 + -8);
    FUN_01f87670(&local_58,0,0);
    *(undefined8 *)(lVar3 + 0x68) = local_58;
    *(undefined8 *)(lVar3 + 0x70) = uStack_50;
    *(undefined8 *)(lVar3 + 0x78) = local_48;
    *(undefined4 *)(lVar3 + 0x80) = local_40;
    iVar6 = FUN_00b97500(param_1);
    if (iVar6 == 0) {
      *(undefined4 *)(lVar2 + 0x2cbb0 + (long)*(int *)(*(long *)(param_1 + -8) + 0x24) * 4) = 5;
      if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
        FUN_00b9e910(param_1 + -0x45e8);
        return;
      }
      goto LAB_00bb2ff8;
    }
    FUN_00b96590(&DAT_02ea7e6c,0x588,"fnbamd_rad_dns_cb",4,"Wait for another DNS reply (%s:%s)",
                 *(long *)(param_1 + -8),*(long *)(param_1 + -8) + 0x28);
  }
  if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
LAB_00bb2ff8:
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}

输出

void FUN_00bb2e00(struct FIB_ENTRY *fib, struct FIB_ENTRY *nfib)
{
 struct FIB_ENTRY *prev_fib = fib - 1;
 struct FIB_ENTRY *prev_nfib = nfib - 1;
 struct FIB_ENTRY *n_fib = fib - 1;
 struct FIB_ENTRY *n_nfib = nfib - 1;
 struct FIB_ENTRY *prev_n_fib = n_fib - 1;
 struct FIB_ENTRY *prev_n_nfib = n_nfib - 1;
 struct FIB_ENTRY *n_n_fib = n_fib - 1;
 struct FIB_ENTRY *n_n_nfib = n_nfib - 1;
 struct FIB_ENTRY *n_n_n_fib = n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_nfib = n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_fib = n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_nfib = n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_fib = n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_nfib = n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_fib = n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_nfib = n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_fib = n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_nfib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1;
 struct FIB_ENTRY *n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib = n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_n_fib - 1

期待给出相关的指导和建议,谢谢。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions