[*] Binary protection state of libxt_rateest.so
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libxt_rateest.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/xtables/libxt_rateest.so @ 0x850 */
| #include <stdint.h>
|
; (fcn) fcn.00000850 () | void fcn_00000850 (int32_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00000850 cmp r1, 0 |
| if (r1 != 0) {
0x00000854 beq 0x868 |
0x00000858 mov r1, r0 | r1 = r0;
0x0000085c ldr r0, [pc, 0xa8] | r0 = *(0x908);
0x00000860 add r0, pc, r0 | r0 = pc + r0;
0x00000864 b 0x62c | void (*0x62c)() ();
| }
0x00000868 push {r4, r5, r6, lr} |
0x0000086c bl 0x16d4 | fcn_000016d4 (r0);
0x00000870 ldr r3, [pc, 0x98] | r3 = *(0x90c);
0x00000874 mov r2, 0 | r2 = 0;
0x00000878 bl 0x17dc | fcn_000017dc (r0);
0x0000087c mov r2, 0 | r2 = 0;
0x00000880 ldr r3, [pc, 0x8c] | r3 = *(0x910);
0x00000884 mov r4, r0 | r4 = r0;
0x00000888 mov r5, r1 | r5 = r1;
0x0000088c bl 0x1d50 | fcn_00001d50 ();
0x00000890 mov r2, 0 | r2 = 0;
0x00000894 ldr r3, [pc, 0x7c] | r3 = *(0x914);
0x00000898 mov r1, r5 | r1 = r5;
0x0000089c cmp r0, 0 |
0x000008a0 mov r0, r4 | r0 = r4;
| if (r0 == 0) {
0x000008a4 beq 0x8c4 | goto label_1;
| }
0x000008a8 bl 0x1a48 | r0 = fcn_00001a48 (r0);
0x000008ac mov r2, r0 | r2 = r0;
0x000008b0 ldr r0, [pc, 0x64] | r0 = *(0x918);
0x000008b4 mov r3, r1 | r3 = r1;
0x000008b8 add r0, pc, r0 | r0 = pc + r0;
| do {
| label_0:
0x000008bc pop {r4, r5, r6, lr} |
0x000008c0 b 0x62c | void (*0x62c)() ();
| label_1:
0x000008c4 bl 0x1d50 | r0 = fcn_00001d50 ();
0x000008c8 cmp r0, 0 |
| if (r0 == 0) {
0x000008cc beq 0x8f8 | goto label_2;
| }
0x000008d0 mov r2, 0 | r2 = 0;
0x000008d4 ldr r3, [pc, 0x44] | r3 = *(0x91c);
0x000008d8 mov r0, r4 | r0 = r4;
0x000008dc mov r1, r5 | r1 = r5;
0x000008e0 bl 0x1a48 | r0 = fcn_00001a48 (r0);
0x000008e4 mov r2, r0 | r2 = r0;
0x000008e8 ldr r0, [pc, 0x34] | r0 = *(0x920);
0x000008ec mov r3, r1 | r3 = r1;
0x000008f0 add r0, pc, r0 | r0 = pc + r0;
0x000008f4 b 0x8bc |
| } while (1);
| label_2:
0x000008f8 ldr r0, [pc, 0x28] | r0 = *(0x924);
0x000008fc mov r2, r4 | r2 = r4;
0x00000900 mov r3, r5 | r3 = r5;
0x00000904 add r0, pc, r0 | r0 = pc + r0;
0x00000908 b 0x8bc | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/xtables/libxt_rateest.so @ 0x92c */
| #include <stdint.h>
|
; (fcn) fcn.0000092c () | void fcn_0000092c (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000092c ldrh r3, [r0, 0x20] | r3 = *((r0 + 0x20));
0x00000930 push {r4, r5, r6, lr} |
0x00000934 tst r3, 1 |
0x00000938 mov r5, r0 | r5 = r0;
0x0000093c mov r4, r1 | r4 = r1;
| if ((r3 & 1) != 0) {
0x00000940 beq 0x950 |
0x00000944 ldr r0, [pc, 0x5c] | r0 = *(0x9a4);
0x00000948 add r0, pc, r0 | r0 = pc + r0;
0x0000094c bl 0x62c | printf (r0)
| }
0x00000950 ldrh r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x00000954 cmp r3, 2 |
| if (r3 == 2) {
0x00000958 beq 0x980 | goto label_1;
| }
0x0000095c cmp r3, 3 |
| if (r3 == 3) {
0x00000960 beq 0x990 | goto label_2;
| }
0x00000964 cmp r3, 1 |
| if (r3 != 1) {
0x00000968 bne 0x9a0 | goto label_3;
| }
0x0000096c ldr r0, [pc, 0x38] | r0 = *(0x9a8);
0x00000970 mov r1, r4 | r1 = r4;
0x00000974 add r0, pc, r0 | r0 = pc + r0;
| do {
| label_0:
0x00000978 pop {r4, r5, r6, lr} |
0x0000097c b 0x62c | void (*0x62c)() ();
| label_1:
0x00000980 ldr r0, [pc, 0x28] | r0 = *(0x9ac);
0x00000984 mov r1, r4 | r1 = r4;
0x00000988 add r0, pc, r0 | r0 = pc + r0;
0x0000098c b 0x978 |
| } while (1);
| label_2:
0x00000990 ldr r0, [pc, 0x1c] | r0 = *(0x9b0);
0x00000994 mov r1, r4 | r1 = r4;
0x00000998 add r0, pc, r0 | r0 = pc + r0;
0x0000099c b 0x978 | goto label_0;
| label_3:
0x000009a0 mov r0, 1 | r0 = 1;
0x000009a4 bl 0x698 | r0 = exit (r0);
| if (r3 != 1) {
0x000009a8 andeq r1, r0, sp, lsr 9 | r1 = r0 & (sp >> 9);
| }
| if (r3 != 1) {
0x000009ac andeq r1, r0, r4, lsl 9 | r1 = r0 & (r4 << 9);
| }
| if (r3 != 1) {
0x000009b0 andeq r1, r0, r6, ror r4 | r1 = r0 & (r6 >>> r4);
| }
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x000009b4 andeq r1, r0, ip, ror 8 | return r1 = r0 & (ip >>> 8);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/xtables/libxt_rateest.so @ 0x9b8 */
| #include <stdint.h>
|
; (fcn) fcn.000009b8 () | void fcn_000009b8 (int32_t arg1, int32_t arg2) {
| int32_t var_18h;
| r0 = arg1;
| r1 = arg2;
0x000009b8 push {r4, r5, r6, r7, r8, lr} |
0x000009bc ldr r5, [sp, 0x18] | r5 = var_18h;
0x000009c0 mov r7, r3 | r7 = r3;
0x000009c4 ldrh r3, [r0, 0x20] | r3 = *((r0 + 0x20));
0x000009c8 mov r4, r0 | r4 = r0;
0x000009cc tst r3, 8 |
0x000009d0 mov r6, r1 | r6 = r1;
| if ((r3 & 8) == 0) {
0x000009d4 beq 0xa30 | goto label_0;
| }
0x000009d8 ldr r0, [pc, 0x6c] | r0 = *(0xa48);
0x000009dc mov r8, r2 | r8 = r2;
0x000009e0 add r0, pc, r0 | r0 = pc + r0;
0x000009e4 bl 0x62c | printf (r0)
0x000009e8 mov r1, r5 | r1 = r5;
0x000009ec mov r0, r8 | r0 = r8;
0x000009f0 bl 0x850 | fcn_00000850 (r0, r1);
0x000009f4 ldr r1, [pc, 0x54] | r1 = *(0xa4c);
0x000009f8 mov r0, r4 | r0 = r4;
0x000009fc add r1, pc, r1 | r1 = pc + r1;
0x00000a00 bl 0x92c | fcn_0000092c (r0, r1);
0x00000a04 ldr r0, [pc, 0x48] | r0 = *(0xa50);
0x00000a08 mov r1, r6 | r1 = r6;
0x00000a0c add r0, pc, r0 | r0 = pc + r0;
| do {
0x00000a10 bl 0x62c | printf (r0, r1)
0x00000a14 ldrh r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00000a18 tst r3, 0xa |
0x00000a1c popeq {r4, r5, r6, r7, r8, pc} |
0x00000a20 mov r1, r5 | r1 = r5;
0x00000a24 mov r0, r7 | r0 = r7;
0x00000a28 pop {r4, r5, r6, r7, r8, lr} |
0x00000a2c b 0x850 | void (*0x850)() ();
| label_0:
0x00000a30 ldr r1, [pc, 0x20] | r1 = *(0xa54);
0x00000a34 add r1, pc, r1 | r1 = pc + r1;
0x00000a38 bl 0x92c | fcn_0000092c (r0, r1);
0x00000a3c ldr r0, [pc, 0x18] | r0 = *(0xa58);
0x00000a40 mov r1, r6 | r1 = r6;
0x00000a44 add r0, pc, r0 | r0 = pc + r0;
0x00000a48 b 0xa10 |
| } while (1);
| }
[*] Function printf used 4 times libxt_rateest.so