Skip to content

Instantly share code, notes, and snippets.

@kkent030315
Created September 2, 2025 07:34
Show Gist options
  • Select an option

  • Save kkent030315/fdc33fb97e852549678874322ceb1309 to your computer and use it in GitHub Desktop.

Select an option

Save kkent030315/fdc33fb97e852549678874322ceb1309 to your computer and use it in GitHub Desktop.
; ModuleID = 'lifted_code'
source_filename = "lifted_code"
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-windows-msvc-coff"
%struct.State = type { %struct.X86State }
%struct.X86State = type { %struct.ArchState, [32 x %union.VectorReg], %struct.ArithFlags, %union.anon, %struct.Segments, %struct.AddressSpace, %struct.GPR, %struct.X87Stack, %struct.MMX, %struct.FPUStatusFlags, %union.anon, %union.FPU, %struct.SegmentCaches, %struct.K_REG }
%struct.ArchState = type { i32, i32, %union.anon }
%union.VectorReg = type { %union.vec512_t }
%union.vec512_t = type { %struct.uint64v8_t }
%struct.uint64v8_t = type { [8 x i64] }
%struct.ArithFlags = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
%struct.Segments = type { i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector, i16, %union.SegmentSelector }
%union.SegmentSelector = type { i16 }
%struct.AddressSpace = type { i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg }
%struct.Reg = type { %union.anon }
%struct.GPR = type { i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg, i64, %struct.Reg }
%struct.X87Stack = type { [8 x %struct.anon.3] }
%struct.anon.3 = type { [6 x i8], %struct.float80_t }
%struct.float80_t = type { [10 x i8] }
%struct.MMX = type { [8 x %struct.anon.4] }
%struct.anon.4 = type { i64, %union.vec64_t }
%union.vec64_t = type { %struct.uint64v1_t }
%struct.uint64v1_t = type { [1 x i64] }
%struct.FPUStatusFlags = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }
%union.anon = type { i64 }
%union.FPU = type { %struct.anon.13 }
%struct.anon.13 = type { %struct.FpuFXSAVE, [96 x i8] }
%struct.FpuFXSAVE = type { %union.SegmentSelector, %union.SegmentSelector, %union.FPUAbridgedTagWord, i8, i16, i32, %union.SegmentSelector, i16, i32, %union.SegmentSelector, i16, %union.FPUControlStatus, %union.FPUControlStatus, [8 x %struct.FPUStackElem], [16 x %union.vec128_t] }
%union.FPUAbridgedTagWord = type { i8 }
%union.FPUControlStatus = type { i32 }
%struct.FPUStackElem = type { %union.anon.11, [6 x i8] }
%union.anon.11 = type { %struct.float80_t }
%union.vec128_t = type { %struct.uint128v1_t }
%struct.uint128v1_t = type { [1 x i128] }
%struct.SegmentCaches = type { %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow, %struct.SegmentShadow }
%struct.SegmentShadow = type { %union.anon, i32, i32 }
%struct.K_REG = type { [8 x %struct.anon.18] }
%struct.anon.18 = type { i64, i64 }
define ptr @sub_0(ptr noalias %state, i64 %program_counter, ptr noalias %memory) {
%state.addr.i = alloca ptr, align 8
%mem.addr.i = alloca ptr, align 8
%call.addr.i = alloca i32, align 4
%rsp.i = alloca i64, align 8
%rbp.i = alloca i64, align 8
%r8.i = alloca i64, align 8
%r9.i = alloca i64, align 8
%r10.i = alloca i64, align 8
%r11.i = alloca i64, align 8
%r12.i = alloca i64, align 8
%r13.i = alloca i64, align 8
%r14.i = alloca i64, align 8
%r15.i = alloca i64, align 8
%read.i = alloca i64, align 8
%gdtr.i = alloca ptr, align 8
%read61.i = alloca i64, align 8
%idtr.i = alloca ptr, align 8
%BRANCH_TAKEN = alloca i8, align 1
%RETURN_PC = alloca i64, align 8
%MONITOR = alloca i64, align 8
%STATE = alloca ptr, align 8
store ptr %state, ptr %STATE, align 8
%MEMORY = alloca ptr, align 8
store ptr %memory, ptr %MEMORY, align 8
%NEXT_PC = alloca i64, align 8
store i64 %program_counter, ptr %NEXT_PC, align 8
%PC = getelementptr inbounds %struct.State, ptr %state, i32 0, i32 0, i32 6, i32 33, i32 0, i32 0
%CSBASE = alloca i64, align 8
store i64 0, ptr %CSBASE, align 8
%SSBASE = alloca i64, align 8
store i64 0, ptr %SSBASE, align 8
%ESBASE = alloca i64, align 8
store i64 0, ptr %ESBASE, align 8
%DSBASE = alloca i64, align 8
store i64 0, ptr %DSBASE, align 8
store i64 %program_counter, ptr %NEXT_PC, align 8
br label %1
1: ; preds = %0
%2 = load i64, ptr %NEXT_PC, align 8
store i64 %2, ptr %PC, align 8
%3 = add i64 %2, 2
store i64 %3, ptr %NEXT_PC, align 8
%4 = load ptr, ptr %MEMORY, align 8
call void @llvm.lifetime.start.p0(i64 8, ptr %state.addr.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %mem.addr.i)
call void @llvm.lifetime.start.p0(i64 4, ptr %call.addr.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %rsp.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %rbp.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r8.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r9.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r10.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r11.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r12.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r13.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r14.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %r15.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %read.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %gdtr.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %read61.i)
call void @llvm.lifetime.start.p0(i64 8, ptr %idtr.i)
store ptr %state, ptr %state.addr.i, align 8
store ptr %4, ptr %mem.addr.i, align 8
store i32 258, ptr %call.addr.i, align 4
%5 = load ptr, ptr %state.addr.i, align 8
%gpr.i = getelementptr inbounds %struct.X86State, ptr %5, i32 0, i32 6
%rsp1.i = getelementptr inbounds %struct.GPR, ptr %gpr.i, i32 0, i32 13
%6 = load i64, ptr %rsp1.i, align 8
store i64 %6, ptr %rsp.i, align 8
%7 = load ptr, ptr %state.addr.i, align 8
%gpr2.i = getelementptr inbounds %struct.X86State, ptr %7, i32 0, i32 6
%rbp3.i = getelementptr inbounds %struct.GPR, ptr %gpr2.i, i32 0, i32 15
%8 = load i64, ptr %rbp3.i, align 8
store i64 %8, ptr %rbp.i, align 8
%9 = load ptr, ptr %state.addr.i, align 8
%gpr4.i = getelementptr inbounds %struct.X86State, ptr %9, i32 0, i32 6
%r85.i = getelementptr inbounds %struct.GPR, ptr %gpr4.i, i32 0, i32 17
%10 = load i64, ptr %r85.i, align 8
store i64 %10, ptr %r8.i, align 8
%11 = load ptr, ptr %state.addr.i, align 8
%gpr6.i = getelementptr inbounds %struct.X86State, ptr %11, i32 0, i32 6
%r97.i = getelementptr inbounds %struct.GPR, ptr %gpr6.i, i32 0, i32 19
%12 = load i64, ptr %r97.i, align 8
store i64 %12, ptr %r9.i, align 8
%13 = load ptr, ptr %state.addr.i, align 8
%gpr8.i = getelementptr inbounds %struct.X86State, ptr %13, i32 0, i32 6
%r109.i = getelementptr inbounds %struct.GPR, ptr %gpr8.i, i32 0, i32 21
%14 = load i64, ptr %r109.i, align 8
store i64 %14, ptr %r10.i, align 8
%15 = load ptr, ptr %state.addr.i, align 8
%gpr10.i = getelementptr inbounds %struct.X86State, ptr %15, i32 0, i32 6
%r1111.i = getelementptr inbounds %struct.GPR, ptr %gpr10.i, i32 0, i32 23
%16 = load i64, ptr %r1111.i, align 8
store i64 %16, ptr %r11.i, align 8
%17 = load ptr, ptr %state.addr.i, align 8
%gpr12.i = getelementptr inbounds %struct.X86State, ptr %17, i32 0, i32 6
%r1213.i = getelementptr inbounds %struct.GPR, ptr %gpr12.i, i32 0, i32 25
%18 = load i64, ptr %r1213.i, align 8
store i64 %18, ptr %r12.i, align 8
%19 = load ptr, ptr %state.addr.i, align 8
%gpr14.i = getelementptr inbounds %struct.X86State, ptr %19, i32 0, i32 6
%r1315.i = getelementptr inbounds %struct.GPR, ptr %gpr14.i, i32 0, i32 27
%20 = load i64, ptr %r1315.i, align 8
store i64 %20, ptr %r13.i, align 8
%21 = load ptr, ptr %state.addr.i, align 8
%gpr16.i = getelementptr inbounds %struct.X86State, ptr %21, i32 0, i32 6
%r1417.i = getelementptr inbounds %struct.GPR, ptr %gpr16.i, i32 0, i32 29
%22 = load i64, ptr %r1417.i, align 8
store i64 %22, ptr %r14.i, align 8
%23 = load ptr, ptr %state.addr.i, align 8
%gpr18.i = getelementptr inbounds %struct.X86State, ptr %23, i32 0, i32 6
%r1519.i = getelementptr inbounds %struct.GPR, ptr %gpr18.i, i32 0, i32 31
%24 = load i64, ptr %r1519.i, align 8
store i64 %24, ptr %r15.i, align 8
%25 = load i32, ptr %call.addr.i, align 4
switch i32 %25, label %sw.default.i [
i32 258, label %sw.bb.i
i32 259, label %sw.bb35.i
i32 260, label %sw.bb42.i
i32 261, label %sw.bb58.i
i32 262, label %sw.bb60.i
i32 263, label %sw.bb63.i
i32 264, label %sw.bb70.i
i32 265, label %sw.bb77.i
i32 266, label %sw.bb78.i
i32 267, label %sw.bb80.i
i32 268, label %sw.bb82.i
i32 269, label %sw.bb84.i
i32 270, label %sw.bb86.i
i32 272, label %sw.bb88.i
i32 278, label %sw.bb90.i
i32 279, label %sw.bb92.i
i32 280, label %sw.bb94.i
i32 281, label %sw.bb96.i
i32 282, label %sw.bb98.i
i32 283, label %sw.bb100.i
i32 284, label %sw.bb102.i
i32 285, label %sw.bb117.i
i32 286, label %sw.bb134.i
]
sw.bb.i: ; preds = %1
%26 = load ptr, ptr %state.addr.i, align 8
%gpr20.i = getelementptr inbounds %struct.X86State, ptr %26, i32 0, i32 6
%rax.i = getelementptr inbounds %struct.GPR, ptr %gpr20.i, i32 0, i32 1
%27 = load ptr, ptr %state.addr.i, align 8
%gpr21.i = getelementptr inbounds %struct.X86State, ptr %27, i32 0, i32 6
%rbx.i = getelementptr inbounds %struct.GPR, ptr %gpr21.i, i32 0, i32 3
%28 = load ptr, ptr %state.addr.i, align 8
%gpr22.i = getelementptr inbounds %struct.X86State, ptr %28, i32 0, i32 6
%rcx.i = getelementptr inbounds %struct.GPR, ptr %gpr22.i, i32 0, i32 5
%29 = load ptr, ptr %state.addr.i, align 8
%gpr23.i = getelementptr inbounds %struct.X86State, ptr %29, i32 0, i32 6
%rdx.i = getelementptr inbounds %struct.GPR, ptr %gpr23.i, i32 0, i32 7
%30 = load ptr, ptr %state.addr.i, align 8
%gpr24.i = getelementptr inbounds %struct.X86State, ptr %30, i32 0, i32 6
%rax25.i = getelementptr inbounds %struct.GPR, ptr %gpr24.i, i32 0, i32 1
%31 = load i64, ptr %rax25.i, align 8
%32 = load ptr, ptr %state.addr.i, align 8
%gpr26.i = getelementptr inbounds %struct.X86State, ptr %32, i32 0, i32 6
%rbx27.i = getelementptr inbounds %struct.GPR, ptr %gpr26.i, i32 0, i32 3
%33 = load i64, ptr %rbx27.i, align 8
%34 = load ptr, ptr %state.addr.i, align 8
%gpr28.i = getelementptr inbounds %struct.X86State, ptr %34, i32 0, i32 6
%rcx29.i = getelementptr inbounds %struct.GPR, ptr %gpr28.i, i32 0, i32 5
%35 = load i64, ptr %rcx29.i, align 8
%36 = load ptr, ptr %state.addr.i, align 8
%gpr30.i = getelementptr inbounds %struct.X86State, ptr %36, i32 0, i32 6
%rdx31.i = getelementptr inbounds %struct.GPR, ptr %gpr30.i, i32 0, i32 7
%37 = load i64, ptr %rdx31.i, align 8
%38 = call { i64, i64, i64, i64 } asm sideeffect "cpuid", "={ax},={bx},={cx},={dx},{ax},{bx},{cx},{dx},~{dirflag},~{fpsr},~{flags}"(i64 %31, i64 %33, i64 %35, i64 %37) #4
%asmresult.i = extractvalue { i64, i64, i64, i64 } %38, 0
%asmresult32.i = extractvalue { i64, i64, i64, i64 } %38, 1
%asmresult33.i = extractvalue { i64, i64, i64, i64 } %38, 2
%asmresult34.i = extractvalue { i64, i64, i64, i64 } %38, 3
store i64 %asmresult.i, ptr %rax.i, align 8
store i64 %asmresult32.i, ptr %rbx.i, align 8
store i64 %asmresult33.i, ptr %rcx.i, align 8
store i64 %asmresult34.i, ptr %rdx.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb35.i: ; preds = %1
%39 = load ptr, ptr %state.addr.i, align 8
%gpr36.i = getelementptr inbounds %struct.X86State, ptr %39, i32 0, i32 6
%rax37.i = getelementptr inbounds %struct.GPR, ptr %gpr36.i, i32 0, i32 1
%40 = load ptr, ptr %state.addr.i, align 8
%gpr38.i = getelementptr inbounds %struct.X86State, ptr %40, i32 0, i32 6
%rdx39.i = getelementptr inbounds %struct.GPR, ptr %gpr38.i, i32 0, i32 7
%41 = call { i32, i32 } asm sideeffect "rdtsc", "={ax},={dx},~{dirflag},~{fpsr},~{flags}"() #4
%asmresult40.i = extractvalue { i32, i32 } %41, 0
%asmresult41.i = extractvalue { i32, i32 } %41, 1
store i32 %asmresult40.i, ptr %rax37.i, align 8
store i32 %asmresult41.i, ptr %rdx39.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb42.i: ; preds = %1
%42 = load ptr, ptr %state.addr.i, align 8
%gpr43.i = getelementptr inbounds %struct.X86State, ptr %42, i32 0, i32 6
%rax44.i = getelementptr inbounds %struct.GPR, ptr %gpr43.i, i32 0, i32 1
%43 = load ptr, ptr %state.addr.i, align 8
%gpr45.i = getelementptr inbounds %struct.X86State, ptr %43, i32 0, i32 6
%rcx46.i = getelementptr inbounds %struct.GPR, ptr %gpr45.i, i32 0, i32 5
%44 = load ptr, ptr %state.addr.i, align 8
%gpr47.i = getelementptr inbounds %struct.X86State, ptr %44, i32 0, i32 6
%rdx48.i = getelementptr inbounds %struct.GPR, ptr %gpr47.i, i32 0, i32 7
%45 = load ptr, ptr %state.addr.i, align 8
%gpr49.i = getelementptr inbounds %struct.X86State, ptr %45, i32 0, i32 6
%rax50.i = getelementptr inbounds %struct.GPR, ptr %gpr49.i, i32 0, i32 1
%46 = load i64, ptr %rax50.i, align 8
%47 = load ptr, ptr %state.addr.i, align 8
%gpr51.i = getelementptr inbounds %struct.X86State, ptr %47, i32 0, i32 6
%rcx52.i = getelementptr inbounds %struct.GPR, ptr %gpr51.i, i32 0, i32 5
%48 = load i64, ptr %rcx52.i, align 8
%49 = load ptr, ptr %state.addr.i, align 8
%gpr53.i = getelementptr inbounds %struct.X86State, ptr %49, i32 0, i32 6
%rdx54.i = getelementptr inbounds %struct.GPR, ptr %gpr53.i, i32 0, i32 7
%50 = load i64, ptr %rdx54.i, align 8
%51 = call { i64, i64, i64 } asm sideeffect "rdtscp", "={ax},={cx},={dx},{ax},{cx},{dx},~{dirflag},~{fpsr},~{flags}"(i64 %46, i64 %48, i64 %50) #4
%asmresult55.i = extractvalue { i64, i64, i64 } %51, 0
%asmresult56.i = extractvalue { i64, i64, i64 } %51, 1
%asmresult57.i = extractvalue { i64, i64, i64 } %51, 2
store i64 %asmresult55.i, ptr %rax44.i, align 8
store i64 %asmresult56.i, ptr %rcx46.i, align 8
store i64 %asmresult57.i, ptr %rdx48.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb58.i: ; preds = %1
%52 = load ptr, ptr %mem.addr.i, align 8
%53 = load ptr, ptr %state.addr.i, align 8
%54 = getelementptr inbounds %struct.ArchState, ptr %53, i32 0, i32 2
%55 = load i64, ptr %54, align 8
%call59.i = call i64 @__remill_read_memory_64(ptr noundef %52, i64 noundef %55) #5
store i64 %call59.i, ptr %read.i, align 8
store ptr %read.i, ptr %gdtr.i, align 8
call void asm sideeffect "lgdt $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(ptr) %gdtr.i) #4
br label %__remill_sync_hyper_call.exit
sw.bb60.i: ; preds = %1
%56 = load ptr, ptr %mem.addr.i, align 8
%57 = load ptr, ptr %state.addr.i, align 8
%58 = getelementptr inbounds %struct.ArchState, ptr %57, i32 0, i32 2
%59 = load i64, ptr %58, align 8
%call62.i = call i64 @__remill_read_memory_64(ptr noundef %56, i64 noundef %59) #5
store i64 %call62.i, ptr %read61.i, align 8
store ptr %read61.i, ptr %idtr.i, align 8
call void asm sideeffect "lidt $0", "*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(ptr) %idtr.i) #4
br label %__remill_sync_hyper_call.exit
sw.bb63.i: ; preds = %1
%60 = load ptr, ptr %state.addr.i, align 8
%gpr64.i = getelementptr inbounds %struct.X86State, ptr %60, i32 0, i32 6
%rcx65.i = getelementptr inbounds %struct.GPR, ptr %gpr64.i, i32 0, i32 5
%61 = load ptr, ptr %state.addr.i, align 8
%gpr66.i = getelementptr inbounds %struct.X86State, ptr %61, i32 0, i32 6
%rax67.i = getelementptr inbounds %struct.GPR, ptr %gpr66.i, i32 0, i32 1
%62 = load i32, ptr %rax67.i, align 8
%63 = load ptr, ptr %state.addr.i, align 8
%gpr68.i = getelementptr inbounds %struct.X86State, ptr %63, i32 0, i32 6
%rdx69.i = getelementptr inbounds %struct.GPR, ptr %gpr68.i, i32 0, i32 7
%64 = load i32, ptr %rdx69.i, align 8
%65 = call i32 asm sideeffect "rdmsr", "={cx},{ax},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %62, i32 %64) #4
store i32 %65, ptr %rcx65.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb70.i: ; preds = %1
%66 = load ptr, ptr %state.addr.i, align 8
%gpr71.i = getelementptr inbounds %struct.X86State, ptr %66, i32 0, i32 6
%rcx72.i = getelementptr inbounds %struct.GPR, ptr %gpr71.i, i32 0, i32 5
%67 = load ptr, ptr %state.addr.i, align 8
%gpr73.i = getelementptr inbounds %struct.X86State, ptr %67, i32 0, i32 6
%rax74.i = getelementptr inbounds %struct.GPR, ptr %gpr73.i, i32 0, i32 1
%68 = load i32, ptr %rax74.i, align 8
%69 = load ptr, ptr %state.addr.i, align 8
%gpr75.i = getelementptr inbounds %struct.X86State, ptr %69, i32 0, i32 6
%rdx76.i = getelementptr inbounds %struct.GPR, ptr %gpr75.i, i32 0, i32 7
%70 = load i32, ptr %rdx76.i, align 8
%71 = call i32 asm sideeffect "wrmsr", "={cx},{ax},{dx},~{dirflag},~{fpsr},~{flags}"(i32 %68, i32 %70) #4
store i32 %71, ptr %rcx72.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb77.i: ; preds = %1
call void asm sideeffect "wbinvd", "~{dirflag},~{fpsr},~{flags}"() #4
br label %__remill_sync_hyper_call.exit
sw.bb78.i: ; preds = %1
%72 = load ptr, ptr %mem.addr.i, align 8
%call79.i = call ptr @__remill_x86_set_segment_es(ptr noundef %72) #6
store ptr %call79.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb80.i: ; preds = %1
%73 = load ptr, ptr %mem.addr.i, align 8
%call81.i = call ptr @__remill_x86_set_segment_ss(ptr noundef %73) #6
store ptr %call81.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb82.i: ; preds = %1
%74 = load ptr, ptr %mem.addr.i, align 8
%call83.i = call ptr @__remill_x86_set_segment_ds(ptr noundef %74) #6
store ptr %call83.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb84.i: ; preds = %1
%75 = load ptr, ptr %mem.addr.i, align 8
%call85.i = call ptr @__remill_x86_set_segment_fs(ptr noundef %75) #6
store ptr %call85.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb86.i: ; preds = %1
%76 = load ptr, ptr %mem.addr.i, align 8
%call87.i = call ptr @__remill_x86_set_segment_gs(ptr noundef %76) #6
store ptr %call87.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb88.i: ; preds = %1
%77 = load ptr, ptr %mem.addr.i, align 8
%call89.i = call ptr @__remill_amd64_set_debug_reg(ptr noundef %77) #6
store ptr %call89.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb90.i: ; preds = %1
%78 = load ptr, ptr %mem.addr.i, align 8
%call91.i = call ptr @__remill_amd64_set_control_reg_0(ptr noundef %78) #6
store ptr %call91.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb92.i: ; preds = %1
%79 = load ptr, ptr %mem.addr.i, align 8
%call93.i = call ptr @__remill_amd64_set_control_reg_1(ptr noundef %79) #6
store ptr %call93.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb94.i: ; preds = %1
%80 = load ptr, ptr %mem.addr.i, align 8
%call95.i = call ptr @__remill_amd64_set_control_reg_2(ptr noundef %80) #6
store ptr %call95.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb96.i: ; preds = %1
%81 = load ptr, ptr %mem.addr.i, align 8
%call97.i = call ptr @__remill_amd64_set_control_reg_3(ptr noundef %81) #6
store ptr %call97.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb98.i: ; preds = %1
%82 = load ptr, ptr %mem.addr.i, align 8
%call99.i = call ptr @__remill_amd64_set_control_reg_4(ptr noundef %82) #6
store ptr %call99.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb100.i: ; preds = %1
%83 = load ptr, ptr %mem.addr.i, align 8
%call101.i = call ptr @__remill_amd64_set_control_reg_8(ptr noundef %83) #6
store ptr %call101.i, ptr %mem.addr.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb102.i: ; preds = %1
%84 = load ptr, ptr %state.addr.i, align 8
%gpr103.i = getelementptr inbounds %struct.X86State, ptr %84, i32 0, i32 6
%rax104.i = getelementptr inbounds %struct.GPR, ptr %gpr103.i, i32 0, i32 1
%85 = load ptr, ptr %state.addr.i, align 8
%gpr105.i = getelementptr inbounds %struct.X86State, ptr %85, i32 0, i32 6
%rax106.i = getelementptr inbounds %struct.GPR, ptr %gpr105.i, i32 0, i32 1
%86 = load i64, ptr %rax106.i, align 8
%87 = load ptr, ptr %state.addr.i, align 8
%gpr107.i = getelementptr inbounds %struct.X86State, ptr %87, i32 0, i32 6
%rbx108.i = getelementptr inbounds %struct.GPR, ptr %gpr107.i, i32 0, i32 3
%88 = load i64, ptr %rbx108.i, align 8
%89 = load ptr, ptr %state.addr.i, align 8
%gpr109.i = getelementptr inbounds %struct.X86State, ptr %89, i32 0, i32 6
%rcx110.i = getelementptr inbounds %struct.GPR, ptr %gpr109.i, i32 0, i32 5
%90 = load i64, ptr %rcx110.i, align 8
%91 = load ptr, ptr %state.addr.i, align 8
%gpr111.i = getelementptr inbounds %struct.X86State, ptr %91, i32 0, i32 6
%rdx112.i = getelementptr inbounds %struct.GPR, ptr %gpr111.i, i32 0, i32 7
%92 = load i64, ptr %rdx112.i, align 8
%93 = load ptr, ptr %state.addr.i, align 8
%gpr113.i = getelementptr inbounds %struct.X86State, ptr %93, i32 0, i32 6
%rsi.i = getelementptr inbounds %struct.GPR, ptr %gpr113.i, i32 0, i32 9
%94 = load i64, ptr %rsi.i, align 8
%95 = load ptr, ptr %state.addr.i, align 8
%gpr114.i = getelementptr inbounds %struct.X86State, ptr %95, i32 0, i32 6
%rdi.i = getelementptr inbounds %struct.GPR, ptr %gpr114.i, i32 0, i32 11
%96 = load i64, ptr %rdi.i, align 8
%97 = load i64, ptr %rsp.i, align 8
%98 = load i64, ptr %rbp.i, align 8
%99 = load i64, ptr %r8.i, align 8
%100 = load i64, ptr %r9.i, align 8
%101 = load i64, ptr %r10.i, align 8
%102 = load i64, ptr %r11.i, align 8
%103 = load i64, ptr %r12.i, align 8
%104 = load i64, ptr %r13.i, align 8
%105 = load i64, ptr %r14.i, align 8
%106 = load i64, ptr %r15.i, align 8
%107 = call { i64, i64 } asm sideeffect "syscall", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %86, i64 %88, i64 %90, i64 %92, i64 %94, i64 %96, i64 %97, i64 %98, i64 %99, i64 %100, i64 %101, i64 %102, i64 %103, i64 %104, i64 %105, i64 %106) #4
%asmresult115.i = extractvalue { i64, i64 } %107, 0
%asmresult116.i = extractvalue { i64, i64 } %107, 1
store i64 %asmresult115.i, ptr %rax104.i, align 8
store i64 %asmresult116.i, ptr %rsp.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb117.i: ; preds = %1
%108 = load ptr, ptr %state.addr.i, align 8
%gpr118.i = getelementptr inbounds %struct.X86State, ptr %108, i32 0, i32 6
%rax119.i = getelementptr inbounds %struct.GPR, ptr %gpr118.i, i32 0, i32 1
%109 = load ptr, ptr %state.addr.i, align 8
%gpr120.i = getelementptr inbounds %struct.X86State, ptr %109, i32 0, i32 6
%rax121.i = getelementptr inbounds %struct.GPR, ptr %gpr120.i, i32 0, i32 1
%110 = load i64, ptr %rax121.i, align 8
%111 = load ptr, ptr %state.addr.i, align 8
%gpr122.i = getelementptr inbounds %struct.X86State, ptr %111, i32 0, i32 6
%rbx123.i = getelementptr inbounds %struct.GPR, ptr %gpr122.i, i32 0, i32 3
%112 = load i64, ptr %rbx123.i, align 8
%113 = load ptr, ptr %state.addr.i, align 8
%gpr124.i = getelementptr inbounds %struct.X86State, ptr %113, i32 0, i32 6
%rcx125.i = getelementptr inbounds %struct.GPR, ptr %gpr124.i, i32 0, i32 5
%114 = load i64, ptr %rcx125.i, align 8
%115 = load ptr, ptr %state.addr.i, align 8
%gpr126.i = getelementptr inbounds %struct.X86State, ptr %115, i32 0, i32 6
%rdx127.i = getelementptr inbounds %struct.GPR, ptr %gpr126.i, i32 0, i32 7
%116 = load i64, ptr %rdx127.i, align 8
%117 = load ptr, ptr %state.addr.i, align 8
%gpr128.i = getelementptr inbounds %struct.X86State, ptr %117, i32 0, i32 6
%rsi129.i = getelementptr inbounds %struct.GPR, ptr %gpr128.i, i32 0, i32 9
%118 = load i64, ptr %rsi129.i, align 8
%119 = load ptr, ptr %state.addr.i, align 8
%gpr130.i = getelementptr inbounds %struct.X86State, ptr %119, i32 0, i32 6
%rdi131.i = getelementptr inbounds %struct.GPR, ptr %gpr130.i, i32 0, i32 11
%120 = load i64, ptr %rdi131.i, align 8
%121 = load i64, ptr %rsp.i, align 8
%122 = load i64, ptr %rbp.i, align 8
%123 = load i64, ptr %r8.i, align 8
%124 = load i64, ptr %r9.i, align 8
%125 = load i64, ptr %r10.i, align 8
%126 = load i64, ptr %r11.i, align 8
%127 = load i64, ptr %r12.i, align 8
%128 = load i64, ptr %r13.i, align 8
%129 = load i64, ptr %r14.i, align 8
%130 = load i64, ptr %r15.i, align 8
%131 = call { i64, i64 } asm sideeffect "sysenter", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %110, i64 %112, i64 %114, i64 %116, i64 %118, i64 %120, i64 %121, i64 %122, i64 %123, i64 %124, i64 %125, i64 %126, i64 %127, i64 %128, i64 %129, i64 %130) #4
%asmresult132.i = extractvalue { i64, i64 } %131, 0
%asmresult133.i = extractvalue { i64, i64 } %131, 1
store i64 %asmresult132.i, ptr %rax119.i, align 8
store i64 %asmresult133.i, ptr %rsp.i, align 8
br label %__remill_sync_hyper_call.exit
sw.bb134.i: ; preds = %1
%132 = load ptr, ptr %state.addr.i, align 8
%gpr135.i = getelementptr inbounds %struct.X86State, ptr %132, i32 0, i32 6
%rax136.i = getelementptr inbounds %struct.GPR, ptr %gpr135.i, i32 0, i32 1
%133 = load ptr, ptr %state.addr.i, align 8
%gpr137.i = getelementptr inbounds %struct.X86State, ptr %133, i32 0, i32 6
%rax138.i = getelementptr inbounds %struct.GPR, ptr %gpr137.i, i32 0, i32 1
%134 = load i64, ptr %rax138.i, align 8
%135 = load ptr, ptr %state.addr.i, align 8
%gpr139.i = getelementptr inbounds %struct.X86State, ptr %135, i32 0, i32 6
%rbx140.i = getelementptr inbounds %struct.GPR, ptr %gpr139.i, i32 0, i32 3
%136 = load i64, ptr %rbx140.i, align 8
%137 = load ptr, ptr %state.addr.i, align 8
%gpr141.i = getelementptr inbounds %struct.X86State, ptr %137, i32 0, i32 6
%rcx142.i = getelementptr inbounds %struct.GPR, ptr %gpr141.i, i32 0, i32 5
%138 = load i64, ptr %rcx142.i, align 8
%139 = load ptr, ptr %state.addr.i, align 8
%gpr143.i = getelementptr inbounds %struct.X86State, ptr %139, i32 0, i32 6
%rdx144.i = getelementptr inbounds %struct.GPR, ptr %gpr143.i, i32 0, i32 7
%140 = load i64, ptr %rdx144.i, align 8
%141 = load ptr, ptr %state.addr.i, align 8
%gpr145.i = getelementptr inbounds %struct.X86State, ptr %141, i32 0, i32 6
%rsi146.i = getelementptr inbounds %struct.GPR, ptr %gpr145.i, i32 0, i32 9
%142 = load i64, ptr %rsi146.i, align 8
%143 = load ptr, ptr %state.addr.i, align 8
%gpr147.i = getelementptr inbounds %struct.X86State, ptr %143, i32 0, i32 6
%rdi148.i = getelementptr inbounds %struct.GPR, ptr %gpr147.i, i32 0, i32 11
%144 = load i64, ptr %rdi148.i, align 8
%145 = load i64, ptr %rsp.i, align 8
%146 = load i64, ptr %rbp.i, align 8
%147 = load i64, ptr %r8.i, align 8
%148 = load i64, ptr %r9.i, align 8
%149 = load i64, ptr %r10.i, align 8
%150 = load i64, ptr %r11.i, align 8
%151 = load i64, ptr %r12.i, align 8
%152 = load i64, ptr %r13.i, align 8
%153 = load i64, ptr %r14.i, align 8
%154 = load i64, ptr %r15.i, align 8
%155 = call { i64, i64 } asm sideeffect "sysexit", "={ax},={rsp},{ax},{bx},{cx},{dx},{si},{di},{rsp},{rbp},{r8},{r9},{r10},{r11},{r12},{r13},{r14},{r15},~{dirflag},~{fpsr},~{flags}"(i64 %134, i64 %136, i64 %138, i64 %140, i64 %142, i64 %144, i64 %145, i64 %146, i64 %147, i64 %148, i64 %149, i64 %150, i64 %151, i64 %152, i64 %153, i64 %154) #4
%asmresult149.i = extractvalue { i64, i64 } %155, 0
%asmresult150.i = extractvalue { i64, i64 } %155, 1
store i64 %asmresult149.i, ptr %rax136.i, align 8
store i64 %asmresult150.i, ptr %rsp.i, align 8
br label %__remill_sync_hyper_call.exit
sw.default.i: ; preds = %1
unreachable
__remill_sync_hyper_call.exit: ; preds = %sw.bb134.i, %sw.bb117.i, %sw.bb102.i, %sw.bb100.i, %sw.bb98.i, %sw.bb96.i, %sw.bb94.i, %sw.bb92.i, %sw.bb90.i, %sw.bb88.i, %sw.bb86.i, %sw.bb84.i, %sw.bb82.i, %sw.bb80.i, %sw.bb78.i, %sw.bb77.i, %sw.bb70.i, %sw.bb63.i, %sw.bb60.i, %sw.bb58.i, %sw.bb42.i, %sw.bb35.i, %sw.bb.i
%156 = load ptr, ptr %mem.addr.i, align 8
call void @llvm.lifetime.end.p0(i64 8, ptr %state.addr.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %mem.addr.i)
call void @llvm.lifetime.end.p0(i64 4, ptr %call.addr.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %rsp.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %rbp.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r8.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r9.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r10.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r11.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r12.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r13.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r14.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %r15.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %read.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %gdtr.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %read61.i)
call void @llvm.lifetime.end.p0(i64 8, ptr %idtr.i)
store ptr %156, ptr %MEMORY, align 8
br label %157
157: ; preds = %__remill_sync_hyper_call.exit
%158 = load i64, ptr %NEXT_PC, align 8
store i64 %158, ptr %PC, align 8
%159 = load ptr, ptr %MEMORY, align 8
%160 = load i64, ptr %PC, align 8
%161 = tail call ptr @__remill_missing_block(ptr %state, i64 %160, ptr %159)
ret ptr %161
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0
; Function Attrs: noduplicate noinline nounwind optnone
declare i64 @__remill_read_memory_64(ptr noundef, i64 noundef) #1
declare ptr @__remill_x86_set_segment_es(ptr noundef) #2
declare ptr @__remill_x86_set_segment_ss(ptr noundef) #2
declare ptr @__remill_x86_set_segment_ds(ptr noundef) #2
declare ptr @__remill_x86_set_segment_fs(ptr noundef) #2
declare ptr @__remill_x86_set_segment_gs(ptr noundef) #2
declare ptr @__remill_amd64_set_debug_reg(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_0(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_1(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_2(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_3(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_4(ptr noundef) #2
declare ptr @__remill_amd64_set_control_reg_8(ptr noundef) #2
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
; Function Attrs: noduplicate noinline nounwind optnone
declare ptr @__remill_missing_block(ptr noundef nonnull align 1, i64 noundef, ptr noundef) #3
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noduplicate noinline nounwind optnone "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" }
attributes #2 = { "frame-pointer"="all" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" }
attributes #3 = { noduplicate noinline nounwind optnone "frame-pointer"="all" "no-builtins" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { nobuiltin "no-builtins" }
attributes #6 = { nobuiltin nounwind "no-builtins" }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment