Created
October 15, 2019 16:26
-
-
Save regehr/ec1237ebe8ade092e4b02424ef4d791d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
regehr@john-home:~/remill-build$ ./tools/lift/remill-lift-4.0 -ir_out /dev/stdout --bytes 4889f9b802000000d3c0c3 --slice_inputs RSP,EDI --slice_outputs RAX | |
; ModuleID = 'lifted_code' | |
source_filename = "lifted_code" | |
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-pc-linux-gnu-elf" | |
%struct.Memory = type opaque | |
%struct.State = 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.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 { i64, double } | |
%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 } | |
%struct.float80_t = type { [10 x i8] } | |
%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 } | |
; Function Attrs: noduplicate noinline nounwind optnone readnone | |
declare i64 @__remill_read_memory_64(%struct.Memory*, i64) local_unnamed_addr #0 | |
; Function Attrs: noduplicate noinline nounwind optnone | |
declare %struct.Memory* @__remill_function_return(%struct.State* dereferenceable(3376), i64, %struct.Memory*) local_unnamed_addr #1 | |
; Function Attrs: nounwind | |
define %struct.Memory* @slice(%struct.Memory*, i64 %RSP, i32 %EDI, i64* nocapture %RAX_output) local_unnamed_addr #2 { | |
%2 = trunc i32 %EDI to i8 | |
%3 = and i8 %2, 31 | |
%4 = icmp eq i8 %3, 0 | |
br i1 %4, label %sub_0.exit, label %5 | |
; <label>:5: ; preds = %1 | |
%6 = zext i8 %3 to i64 | |
%7 = shl i64 2, %6 | |
%8 = sub nsw i64 32, %6 | |
%9 = lshr i64 2, %8 | |
%10 = or i64 %9, %7 | |
%11 = and i64 %10, 4294967295 | |
br label %sub_0.exit | |
sub_0.exit: ; preds = %5, %1 | |
%.sroa.2.0 = phi i64 [ 2, %1 ], [ %11, %5 ] | |
%12 = tail call i64 @__remill_read_memory_64(%struct.Memory* %0, i64 %RSP) #3 | |
%13 = tail call %struct.Memory* @__remill_function_return(%struct.State* nonnull undef, i64 %12, %struct.Memory* %0) #2, !noalias !0 | |
store i64 %.sroa.2.0, i64* %RAX_output, align 8 | |
ret %struct.Memory* %13 | |
} | |
attributes #0 = { noduplicate noinline nounwind optnone readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #1 = { noduplicate noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #2 = { nounwind } | |
attributes #3 = { nobuiltin nounwind readnone } | |
!0 = !{!1} | |
!1 = distinct !{!1, !2, !"sub_0: argument 0"} | |
!2 = distinct !{!2, !"sub_0"} | |
regehr@john-home:~/remill-build$ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment