; ModuleID
=
'TestProgram.cpp'
source_filename
=
"TestProgram.cpp"
target datalayout
=
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple
=
"x86_64-unknown-linux-gnu"
@input
=
dso_local
global
[
100
x i8] zeroinitializer, align
16
@enc
=
dso_local
global
<{ [
22
x i8], [
78
x i8] }> <{ [
22
x i8] c
"\86\8A}\87\93\8BM\81\80\8AC\7FII\86q\7FbSi(\9D"
, [
78
x i8] zeroinitializer }>, align
16
@.
str
=
private unnamed_addr constant [
25
x i8] c
"Please input your flag: \00"
, align
1
@.
str
.
1
=
private unnamed_addr constant [
3
x i8] c
"%s\00"
, align
1
@.
str
.
2
=
private unnamed_addr constant [
18
x i8] c
"Congratulations~\0A\00"
, align
1
@.
str
.
3
=
private unnamed_addr constant [
18
x i8] c
"Sorry try again.\0A\00"
, align
1
; Function Attrs: noinline nounwind optnone uwtable mustprogress
define dso_local void @_Z7encryptPhPc(i8
*
%
0
, i8
*
%
1
)
%
3
=
alloca i8
*
, align
8
%
4
=
alloca i8
*
, align
8
%
5
=
alloca i32, align
4
%
6
=
alloca i32, align
4
store i8
*
%
0
, i8
*
*
%
3
, align
8
store i8
*
%
1
, i8
*
*
%
4
, align
8
%
7
=
load i8
*
, i8
*
*
%
4
, align
8
%
8
=
call i64 @strlen(i8
*
%
7
)
%
9
=
trunc i64
%
8
to i32
store i32
%
9
, i32
*
%
5
, align
4
store i32
0
, i32
*
%
6
, align
4
br label
%
10
10
: ; preds
=
%
31
,
%
2
%
11
=
load i32, i32
*
%
6
, align
4
%
12
=
load i32, i32
*
%
5
, align
4
%
13
=
icmp slt i32
%
11
,
%
12
br i1
%
13
, label
%
14
, label
%
34
14
: ; preds
=
%
10
%
15
=
load i8
*
, i8
*
*
%
4
, align
8
%
16
=
load i32, i32
*
%
6
, align
4
%
17
=
sext i32
%
16
to i64
%
18
=
getelementptr inbounds i8, i8
*
%
15
, i64
%
17
%
19
=
load i8, i8
*
%
18
, align
1
%
20
=
sext i8
%
19
to i32
%
21
=
load i32, i32
*
%
6
, align
4
%
22
=
sub nsw i32
32
,
%
21
%
23
=
add nsw i32
%
20
,
%
22
%
24
=
load i32, i32
*
%
6
, align
4
%
25
=
xor i32
%
23
,
%
24
%
26
=
trunc i32
%
25
to i8
%
27
=
load i8
*
, i8
*
*
%
3
, align
8
%
28
=
load i32, i32
*
%
6
, align
4
%
29
=
sext i32
%
28
to i64
%
30
=
getelementptr inbounds i8, i8
*
%
27
, i64
%
29
store i8
%
26
, i8
*
%
30
, align
1
br label
%
31
31
: ; preds
=
%
14
%
32
=
load i32, i32
*
%
6
, align
4
%
33
=
add nsw i32
%
32
,
1
store i32
%
33
, i32
*
%
6
, align
4
br label
%
10
, !llvm.loop !
2
34
: ; preds
=
%
10
ret void
}
; Function Attrs: nounwind readonly willreturn
declare dso_local i64 @strlen(i8
*
)
; Function Attrs: noinline norecurse optnone uwtable mustprogress
define dso_local i32 @main()
%
1
=
alloca i32, align
4
%
2
=
alloca [
100
x i8], align
16
%
3
=
alloca i8, align
1
store i32
0
, i32
*
%
1
, align
4
%
4
=
call i32 (i8
*
, ...) @printf(i8
*
getelementptr inbounds ([
25
x i8], [
25
x i8]
*
@.
str
, i64
0
, i64
0
))
%
5
=
call i32 (i8
*
, ...) @__isoc99_scanf(i8
*
getelementptr inbounds ([
3
x i8], [
3
x i8]
*
@.
str
.
1
, i64
0
, i64
0
), i8
*
getelementptr inbounds ([
100
x i8], [
100
x i8]
*
@
input
, i64
0
, i64
0
))
%
6
=
bitcast [
100
x i8]
*
%
2
to i8
*
call void @llvm.memset.p0i8.i64(i8
*
align
16
%
6
, i8
0
, i64
100
, i1 false)
%
7
=
getelementptr inbounds [
100
x i8], [
100
x i8]
*
%
2
, i64
0
, i64
0
call void @_Z7encryptPhPc(i8
*
%
7
, i8
*
getelementptr inbounds ([
100
x i8], [
100
x i8]
*
@
input
, i64
0
, i64
0
))
%
8
=
call i64 @strlen(i8
*
getelementptr inbounds ([
100
x i8], [
100
x i8]
*
@
input
, i64
0
, i64
0
))
%
9
=
icmp eq i64
%
8
,
22
br i1
%
9
, label
%
10
, label
%
15
10
: ; preds
=
%
0
%
11
=
getelementptr inbounds [
100
x i8], [
100
x i8]
*
%
2
, i64
0
, i64
0
%
12
=
call i32 @memcmp(i8
*
%
11
, i8
*
getelementptr inbounds ([
100
x i8], [
100
x i8]
*
bitcast (<{ [
22
x i8], [
78
x i8] }>
*
@enc to [
100
x i8]
*
), i64
0
, i64
0
), i64
22
)
%
13
=
icmp ne i32
%
12
,
0
%
14
=
xor i1
%
13
, true
br label
%
15
15
: ; preds
=
%
10
,
%
0
%
16
=
phi i1 [ false,
%
0
], [
%
14
,
%
10
]
%
17
=
zext i1
%
16
to i8
store i8
%
17
, i8
*
%
3
, align
1
%
18
=
load i8, i8
*
%
3
, align
1
%
19
=
trunc i8
%
18
to i1
br i1
%
19
, label
%
20
, label
%
22
20
: ; preds
=
%
15
%
21
=
call i32 (i8
*
, ...) @printf(i8
*
getelementptr inbounds ([
18
x i8], [
18
x i8]
*
@.
str
.
2
, i64
0
, i64
0
))
br label
%
24
22
: ; preds
=
%
15
%
23
=
call i32 (i8
*
, ...) @printf(i8
*
getelementptr inbounds ([
18
x i8], [
18
x i8]
*
@.
str
.
3
, i64
0
, i64
0
))
br label
%
24
24
: ; preds
=
%
22
,
%
20
%
25
=
load i32, i32
*
%
1
, align
4
ret i32
%
25
}
declare dso_local i32 @printf(i8
*
, ...)
declare dso_local i32 @__isoc99_scanf(i8
*
, ...)
; Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i64(i8
*
nocapture writeonly, i8, i64, i1 immarg)
; Function Attrs: nounwind readonly willreturn
declare dso_local i32 @memcmp(i8
*
, i8
*
, i64)
attributes
attributes
attributes
attributes
attributes
attributes
!llvm.module.flags
=
!{!
0
}
!llvm.ident
=
!{!
1
}
!
0
=
!{i32
1
, !
"wchar_size"
, i32
4
}
!
1
=
!{!
"clang version 12.0.1"
}
!
2
=
distinct !{!
2
, !
3
}
!
3
=
!{!
"llvm.loop.mustprogress"
}