mirror of
https://git.soft.fish/val/MicroCorruption.git
synced 2024-11-23 00:35:57 +00:00
278 lines
6.2 KiB
ArmAsm
278 lines
6.2 KiB
ArmAsm
|
.file "coldlake.c"
|
||
|
.cpu 430
|
||
|
.mpy none
|
||
|
|
||
|
; GNU C (mspgcc_20120406) version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (msp430)
|
||
|
; compiled by GNU C version 12.2.0, GMP version 6.2.1, MPFR version 4.1.0-p13, MPC version 1.2.1
|
||
|
; GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
|
||
|
; options passed: coldlake.c -O0 -fverbose-asm
|
||
|
; options enabled: -fauto-inc-dec -fbranch-count-reg -fcommon
|
||
|
; -fdelete-null-pointer-checks -fearly-inlining
|
||
|
; -feliminate-unused-debug-types -ffunction-cse -fgcse-lm -fident
|
||
|
; -finline-functions-called-once -fira-share-save-slots
|
||
|
; -fira-share-spill-slots -fivopts -fkeep-static-consts
|
||
|
; -fleading-underscore -fmath-errno -fmerge-debug-strings
|
||
|
; -fmove-loop-invariants -fpeephole -fprefetch-loop-arrays
|
||
|
; -freg-struct-return -fsched-critical-path-heuristic
|
||
|
; -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
|
||
|
; -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
|
||
|
; -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fshow-column
|
||
|
; -fsigned-zeros -fsplit-ivs-in-unroller -fstrict-volatile-bitfields
|
||
|
; -ftrapping-math -ftree-forwprop -ftree-loop-if-convert -ftree-loop-im
|
||
|
; -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops=
|
||
|
; -ftree-phiprop -ftree-pta -ftree-reassoc -ftree-scev-cprop
|
||
|
; -ftree-slp-vectorize -ftree-vect-loop-version -funit-at-a-time
|
||
|
; -fverbose-asm -fzero-initialized-in-bss
|
||
|
|
||
|
; Compiler executable checksum: e798769d5090625420b1df34770b8edb
|
||
|
|
||
|
.section .rodata
|
||
|
.LC0:
|
||
|
.string "Welcome to the secure program loader."
|
||
|
.LC1:
|
||
|
.string "Please enter second stage load address."
|
||
|
.LC2:
|
||
|
.string "Please enter the second stage program."
|
||
|
.LC3:
|
||
|
.string "Please enter program signature."
|
||
|
.LC4:
|
||
|
.string "Signature valid, executing payload"
|
||
|
.LC5:
|
||
|
.string "ACCESS GRANTED"
|
||
|
.LC6:
|
||
|
.string "ACCESS DENIED"
|
||
|
.LC7:
|
||
|
.string "Incorrect signature, continuing"
|
||
|
.LC8:
|
||
|
.string "Load address outside allowed range of 0x8000-0xF000"
|
||
|
.section .init9,"ax",@progbits
|
||
|
.p2align 1,0
|
||
|
.global main
|
||
|
.type main,@function
|
||
|
/***********************
|
||
|
* Function `main'
|
||
|
***********************/
|
||
|
main:
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
add #llo(-324), sp ; ,
|
||
|
mov #.LC0, r15 ; ,
|
||
|
call #puts ;
|
||
|
.L7:
|
||
|
mov #.LC1, r15 ; ,
|
||
|
call #puts ;
|
||
|
mov #2, r14 ; ,
|
||
|
mov r4, r15 ; ,
|
||
|
add #llo(-326), r15 ; ,
|
||
|
call #getsn ;
|
||
|
mov #.LC2, r15 ; ,
|
||
|
call #puts ;
|
||
|
mov r4, r15 ; , tmp34
|
||
|
add #llo(-259), r15 ; , tmp34
|
||
|
mov #257, r14 ; , tmp36
|
||
|
mov r14, r13 ; tmp36,
|
||
|
mov #0, r14 ; ,
|
||
|
call #memset ;
|
||
|
mov r4, r15 ; , tmp38
|
||
|
add #llo(-259), r15 ; , tmp38
|
||
|
mov #256, r14 ; ,
|
||
|
call #getsn ;
|
||
|
mov #.LC3, r15 ; ,
|
||
|
call #puts ;
|
||
|
mov r4, r15 ; , tmp39
|
||
|
add #llo(-324), r15 ; , tmp39
|
||
|
mov #65, r14 ; , tmp41
|
||
|
mov r14, r13 ; tmp41,
|
||
|
mov #0, r14 ; ,
|
||
|
call #memset ;
|
||
|
mov r4, r15 ; , tmp43
|
||
|
add #llo(-324), r15 ; , tmp43
|
||
|
mov #64, r14 ; ,
|
||
|
call #getsn ;
|
||
|
mov -326(r4), r15 ; loadaddr, loadaddr.0
|
||
|
cmp #0, r15 ; , loadaddr.1
|
||
|
jge .L2 ;
|
||
|
mov -326(r4), r15 ; loadaddr, loadaddr.2
|
||
|
cmp #llo(-4095), r15 ; , loadaddr.3
|
||
|
jhs .L2 ;
|
||
|
mov -326(r4), r15 ; loadaddr, loadaddr.4
|
||
|
mov r4, r14 ; , tmp44
|
||
|
add #llo(-259), r14 ; , tmp44
|
||
|
mov #256, r13 ; , tmp47
|
||
|
call #memcpy ;
|
||
|
mov -326(r4), r15 ; loadaddr, loadaddr.5
|
||
|
mov r4, r14 ; , tmp49
|
||
|
add #llo(-324), r14 ; , tmp49
|
||
|
mov r14, r12 ; tmp49,
|
||
|
mov #256, r13 ; ,
|
||
|
mov r15, r14 ; loadaddr.5,
|
||
|
mov #9216, r15 ; ,
|
||
|
call #verify_ed25519 ;
|
||
|
cmp #1, r15 ; , D.1328
|
||
|
jne .L3 ;
|
||
|
mov #.LC4, r15 ; ,
|
||
|
call #puts ;
|
||
|
mov -326(r4), r15 ; loadaddr, loadaddr.6
|
||
|
call r15 ; loadaddr.6
|
||
|
cmp #0, r15 ; , D.1332
|
||
|
jeq .L4 ;
|
||
|
mov #.LC5, r15 ; ,
|
||
|
call #puts ;
|
||
|
push #0 ;
|
||
|
push #0 ;
|
||
|
push #127 ;
|
||
|
call #INT ;
|
||
|
add #6, sp ; ,
|
||
|
mov #0, r15 ; ,
|
||
|
call #exit ;
|
||
|
.L4:
|
||
|
mov #.LC6, r15 ; ,
|
||
|
call #puts ;
|
||
|
jmp .L6 ;
|
||
|
.L3:
|
||
|
mov #.LC7, r15 ; ,
|
||
|
call #puts ;
|
||
|
jmp .L6 ;
|
||
|
.L2:
|
||
|
mov #.LC8, r15 ; ,
|
||
|
call #puts ;
|
||
|
jmp .L7 ;
|
||
|
.L6:
|
||
|
jmp .L7 ;
|
||
|
.LIRD0:
|
||
|
.Lfe1:
|
||
|
.size main,.Lfe1-main
|
||
|
;; End of function
|
||
|
|
||
|
.text
|
||
|
.p2align 1,0
|
||
|
.global INT
|
||
|
.type INT,@function
|
||
|
/***********************
|
||
|
* Function `INT'
|
||
|
***********************/
|
||
|
INT:
|
||
|
push r4 ;
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
pop r4 ;
|
||
|
ret
|
||
|
.Lfe2:
|
||
|
.size INT,.Lfe2-INT
|
||
|
;; End of function
|
||
|
|
||
|
.p2align 1,0
|
||
|
.global verify_ed25519
|
||
|
.type verify_ed25519,@function
|
||
|
/***********************
|
||
|
* Function `verify_ed25519'
|
||
|
***********************/
|
||
|
verify_ed25519:
|
||
|
push r4 ;
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
add #llo(-10), sp ; ,
|
||
|
mov r15, -10(r4) ; ed25519_pubkey, ed25519_pubkey
|
||
|
mov r14, -8(r4) ; buf, buf
|
||
|
mov r13, -6(r4) ; size, size
|
||
|
mov r12, -4(r4) ; signature, signature
|
||
|
mov #0, -12(r4) ; , result
|
||
|
mov #llo(-12), r15 ; ,
|
||
|
add r4, r15 ; ,
|
||
|
push r15 ;
|
||
|
push -4(r4) ; signature
|
||
|
push -6(r4) ; size
|
||
|
push -8(r4) ; buf
|
||
|
push -10(r4) ; ed25519_pubkey
|
||
|
push #51 ;
|
||
|
call #INT ;
|
||
|
add #12, sp ; ,
|
||
|
mov -12(r4), r15 ; result, D.1316
|
||
|
add #10, sp ; ,
|
||
|
pop r4 ;
|
||
|
ret
|
||
|
.Lfe3:
|
||
|
.size verify_ed25519,.Lfe3-verify_ed25519
|
||
|
;; End of function
|
||
|
|
||
|
.p2align 1,0
|
||
|
.global getsn
|
||
|
.type getsn,@function
|
||
|
/***********************
|
||
|
* Function `getsn'
|
||
|
***********************/
|
||
|
getsn:
|
||
|
push r4 ;
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
sub #4, sp ; ,
|
||
|
mov r15, -6(r4) ; buf, buf
|
||
|
mov r14, -4(r4) ; length, length
|
||
|
push -4(r4) ; length
|
||
|
push -6(r4) ; buf
|
||
|
push #2 ;
|
||
|
call #INT ;
|
||
|
add #6, sp ; ,
|
||
|
add #4, sp ; ,
|
||
|
pop r4 ;
|
||
|
ret
|
||
|
.Lfe4:
|
||
|
.size getsn,.Lfe4-getsn
|
||
|
;; End of function
|
||
|
|
||
|
.p2align 1,0
|
||
|
.global putchar
|
||
|
.type putchar,@function
|
||
|
/***********************
|
||
|
* Function `putchar'
|
||
|
***********************/
|
||
|
putchar:
|
||
|
push r4 ;
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
sub #2, sp ; ,
|
||
|
mov r15, -4(r4) ; c, c
|
||
|
push -4(r4) ; c
|
||
|
push #0 ;
|
||
|
call #INT ;
|
||
|
add #4, sp ; ,
|
||
|
add #2, sp ; ,
|
||
|
pop r4 ;
|
||
|
ret
|
||
|
.Lfe5:
|
||
|
.size putchar,.Lfe5-putchar
|
||
|
;; End of function
|
||
|
|
||
|
.p2align 1,0
|
||
|
.global puts
|
||
|
.type puts,@function
|
||
|
/***********************
|
||
|
* Function `puts'
|
||
|
***********************/
|
||
|
puts:
|
||
|
push r4 ;
|
||
|
mov sp, r4 ; ,
|
||
|
add #2, r4 ; ,
|
||
|
sub #4, sp ; ,
|
||
|
mov r15, -4(r4) ; str, str
|
||
|
jmp .L13 ;
|
||
|
.L14:
|
||
|
add #1, -4(r4) ; , str
|
||
|
mov.b -6(r4), r15 ; c, D.1313
|
||
|
sxt r15 ; D.1313
|
||
|
call #putchar ;
|
||
|
.L13:
|
||
|
mov -4(r4), r15 ; str, tmp27
|
||
|
mov.b @r15, -6(r4) ; *str_1, c
|
||
|
cmp.b #0, -6(r4) ; , c
|
||
|
jne .L14 ;
|
||
|
mov #10, r15 ; ,
|
||
|
call #putchar ;
|
||
|
mov #0, r15 ; , D.1314
|
||
|
add #4, sp ; ,
|
||
|
pop r4 ;
|
||
|
ret
|
||
|
.Lfe6:
|
||
|
.size puts,.Lfe6-puts
|
||
|
;; End of function
|