Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void fopen(char* filename){
- /* Coloca do registrador
- R3 ao R7 e o LR na pilha */
- asm("PUSH {R3-R7, LR}");
- /* SP = SP - 0x30 */
- /* SP = Stack Pointer */
- asm("SUB SP, SP, #0x30");
- /* R5 = 0x0809797C */
- asm("LDR R5, =0x809797C");
- /* R5 = *R5 ? */
- asm("LDR R5, [R5]");
- /* R5 += 8 */
- asm("ADDS R5, #8");
- /* R1 = 0x2EA0 */
- asm("LDR R1, =0x2EA0");
- /* R0 = R5 + R1 ? */
- asm("ADDS R0, R5, R1");
- /* R1 = SP + #0x48 - var_40(0x40) */
- asm("ADD R1, SP, #0x48-#0x40");
- /* R4 = 0x08061451 */
- asm("LDR R4, =0x8061451");
- /* JUMP 0x08061451 */
- /* Basicamente isso é uma chamada de função, ele tá colocando
- os argumentos e depois da um jump pra R4, provavelmente para ir
- para a SUBb-rotina */
- asm("BLX R4");
- /* R3 = 0 */
- asm("MOVS R3, #0");
- /* (SP, #0x48 - #0x2C) = R3 */
- asm("STR R3, [SP, #0x48-#0x2C]");
- /* (SP, #0x48 - #0x48) = R3 */
- asm("STR R3, [SP, #0x48-#0x48]");
- /* (SP, #0x48 - #0x44) = R3 */
- asm("STR R3, [SP, #0x48-#0x44]");
- /* R0, SP + #0x48-0x38 */
- asm("ADD R0, SP, #0x48-#0x38");
- /* R1 = R5 */
- asm("MOVS R1, R5");
- /* R2 = [SP, #0x48-#0x40] */
- asm("LDR R2, [SP, #0x48-#0x40]");
- /* R3 = [SP, #0x48-#0x3C] */
- asm("LDR R3, [SP, #0x48-#0x3C]");
- /* R4 = 0x08063F91 */
- asm("LDR R4, =0x8063F91");
- /* Jump 0x08063F91 */
- asm("BLX R4");
- /* Aqui fica a mesma explicação lá de cima
- é argumentos + chamada de rotina */
- /* R6 = [SP, #0x48 - #0x2C] */
- asm("LDR R6, [SP, #0x48 - #0x2C");
- /* R0 = SP + #0x48-#0x2C */
- asm("ADD R0, SP, #0x48-#0x2C");
- /* R1 = 4 */
- asm("MOVS R1, #4");
- /* [R0] = R1(4) */
- asm("STR R1, [R0]");
- /* R1 = 1C */
- asm("MOVS R1, #0x1C");
- /* [R0, #8] = R1 ? */
- asm("STR R1, [R0, #8]");
- /* AQUI EU NUM ENTENDI BEM PRA SER SINCERO
- ADR É UMA PSEUDO-OP */
- asm("ADR R1, FILENAME ?");
- /* [R0, #4] = R1 */
- asm("STR R1, [R0, #4]");
- /* R0 = #0 */
- asm("MOVS R0, #0");
- /* [SP, #0x48-0x28] = R0 */
- asm("STR R0, [SP, #0x48-#0x28");
- /* R3 = 1 */
- asm("MOVS R3, #1");
- /* [SP, #0x48-#0x48] = R3 */
- asm("STR R3, [SP, #0x48-#0x48]");
- /* [SP, #0x48-#0x44] = R0 */
- asm("STR R0, [SP, #0x48-#0x44]");
- /* R1 = SP + 0x48-0x28 */
- asm("ADD R1, SP, #0x48-#0x28");
- /* MOVS R2, #0 */
- asm("MOVS R2, #0");
- /* R3 = SP + #0x48-#0x24 */
- asm("ADD R3, SP, #0x48-#0x24");
- /* R0 = R6 */
- asm("MOVS R0, R6");
- /* R4 = [R0] */
- asm("LDR R4, [R0]");
- /* R4 = [R4, #8] */
- asm("LDR R4, [R4, #8]");
- /* JUMP R4 */
- asm("BLX R4");
- /* Aqui entra o contexto das outras
- duas explicadas, uma chama de função xD */
- /* R0 = [SP, #0x48-#0x28] */
- asm("LDR R0, [SP, #0x48-#0x28]");
- /* SP = SP + 0x30 */
- asm("ADD SP, SP, #0x30");
- /* Retira da pilha tudo que foi colocado no início
- e K.O :] */
- asm("POP {R3-R7, PC}");
- }
- saved-
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement