[*] Binary protection state of libgstreamer-1.0.so.0.1803.0
Full RELRO No Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libgstreamer-1.0.so.0.1803.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x33b38 */
| #include <stdint.h>
|
; (fcn) fcn.00033b38 () | void fcn_00033b38 () {
0x00033b38 invalid |
0x00033b3c ldr r4, [pc, 0x2c] |
0x00033b3e mov r5, r1 | r5 = r1;
0x00033b40 ldr r3, [pc, 0x2c] | r3 = *(0x33b70);
0x00033b42 add r4, pc |
0x00033b44 ldr r6, [r4, r3] | r6 = *(0x676b2);
0x00033b46 ldr r0, [r6] | r0 = *(0x676b2);
0x00033b48 bl 0x33ab8 | gst_caps_features_set_parent_refcount ();
0x00033b4c ldr r0, [r6] | r0 = *(0x676b2);
0x00033b4e bl 0x339b8 | gst_caps_features_free ();
0x00033b52 ldr r3, [pc, 0x20] | r3 = *(0x33b76);
0x00033b54 mov r1, r5 | r1 = r5;
0x00033b56 str r5, [r6] | *(r6) = r5;
0x00033b58 ldr r4, [r4, r3] | r4 = *(0x676b2);
0x00033b5a ldr r0, [r4] | r0 = *(0x676b2);
0x00033b5c bl 0x33ab8 | gst_caps_features_set_parent_refcount ();
0x00033b60 ldr r0, [r4] | r0 = *(0x676b2);
0x00033b62 bl 0x339b8 | gst_caps_features_free ();
0x00033b66 str r5, [r4] | *(r4) = r5;
0x00033b68 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32308 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_can_intersect () | void gst_caps_can_intersect (int16_t arg_0h, uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00032308 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003230c sub sp, 0x1c |
0x0003230e ldr.w fp, [pc, 0x170] |
0x00032312 add fp, pc | fp = 0x64798;
| if (r0 != 0) {
0x00032314 cbz r0, 0x32326 |
0x00032316 ldr r3, [pc, 0x16c] |
0x00032318 mov sb, r0 | sb = r0;
0x0003231a ldr r2, [r0] | r2 = *(r0);
0x0003231c ldr.w r3, [fp, r3] | r3 = *((fp + r3));
0x00032320 ldr r3, [r3] | r3 = *(0x32486);
0x00032322 cmp r2, r3 |
| if (r2 == r3) {
0x00032324 beq 0x32344 | goto label_3;
| }
| }
0x00032326 ldr r1, [pc, 0x160] |
0x00032328 ldr r3, [pc, 0x160] | r3 = *(0x3248c);
0x0003232a ldr r2, [pc, 0x164] |
0x0003232c add r1, pc |
0x0003232e ldr.w r0, [fp, r3] | r0 = *((fp + r3));
0x00032332 add.w r1, r1, 0x2a0 | r1 = 0x64a5a;
0x00032336 add r2, pc | r2 = 0x647cc;
0x00032338 blx 0x1fdd0 | fcn_0001fdd0 ();
0x0003233c movs r0, 0 | r0 = 0;
| label_2:
0x0003233e add sp, 0x1c |
0x00032340 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00032344 mov sl, r1 | sl = r1;
| if (r1 != 0) {
0x00032346 cbz r1, 0x3234e |
0x00032348 ldr r3, [r1] | r3 = *(r1);
0x0003234a cmp r2, r3 |
| if (r2 == r3) {
0x0003234c beq 0x3236c | goto label_4;
| }
| }
0x0003234e ldr r1, [pc, 0x144] |
0x00032350 ldr r3, [pc, 0x138] | r3 = *(0x3248c);
0x00032352 ldr r2, [pc, 0x144] |
0x00032354 add r1, pc |
0x00032356 ldr.w r0, [fp, r3] | r0 = *((fp + r3));
0x0003235a add.w r1, r1, 0x2a0 | r1 = 0x64a8e;
0x0003235e add r2, pc | r2 = 0x647fc;
0x00032360 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032362 ldc p0, c2, [r6, -0]! | __asm ("ldc p0, c2, [r6, -0]!");
0x00032366 add sp, 0x1c |
0x00032368 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0003236c cmp r0, r1 |
| if (r0 == r1) {
0x0003236e beq.w 0x32474 | goto label_5;
| }
0x00032372 ldr r3, [r0, 0xc] | r3 = *(arg_0hxc);
0x00032374 ands r3, r3, 0x10 | r3 &= 0x10;
0x00032378 str r3, [sp, 8] | var_8h = r3;
| if (r3 == r3) {
0x0003237a bne 0x32388 |
0x0003237c ldr r3, [r0, 0x24] | r3 = *(arg_0hx24);
0x0003237e cmp r3, 0 |
| if (r3 == 0) {
0x00032380 beq 0x3247c | goto label_6;
| }
0x00032382 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00032384 cmp r3, 0 |
| if (r3 == 0) {
0x00032386 beq 0x3247c | goto label_6;
| }
| }
0x00032388 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0003238c lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0003238e bmi 0x32474 | goto label_5;
| }
0x00032390 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00032394 cmp r3, 0 |
| if (r3 == 0) {
0x00032396 beq 0x3247c | goto label_6;
| }
0x00032398 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0003239a str r2, [sp, 0x10] | var_10h = r2;
0x0003239c cmp r2, 0 |
| if (r2 == 0) {
0x0003239e beq 0x3247c | goto label_6;
| }
0x000323a0 ldr r3, [sp, 8] | r3 = var_8h;
0x000323a2 cmp r3, 0 |
| if (r3 != 0) {
0x000323a4 bne 0x32474 | goto label_5;
| }
0x000323a6 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x000323aa subs r2, 1 | r2--;
0x000323ac ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000323ae add r2, r3 | r2 += r3;
0x000323b0 str r2, [sp, 0xc] | var_ch = r2;
0x000323b2 cmp r2, 0 |
| if (r2 == 0) {
0x000323b4 beq 0x3247c | goto label_6;
| }
0x000323b6 ldr r6, [sp, 8] | r6 = var_8h;
0x000323b8 subs r3, 1 | r3--;
0x000323ba str r3, [sp, 0x14] | var_14h = r3;
0x000323bc mov r4, r6 | r4 = r6;
0x000323be mov r7, r6 | r7 = r6;
0x000323c0 str r6, [sp] | *(sp) = r6;
| label_0:
0x000323c2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000323c4 cmp r4, r3 |
| if (r4 >= r3) {
0x000323c6 bhs 0x32430 | goto label_7;
| }
0x000323c8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000323ca lsl.w r8, r4, 3 | r8 = r4 << 3;
0x000323ce add r4, r7 | r4 += r7;
0x000323d0 str r6, [sp, 4] | var_4h = r6;
0x000323d2 mov r6, r8 | r6 = r8;
0x000323d4 subs r5, r4, r3 | r5 = r4 - r3;
| do {
0x000323d6 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x000323da ldr r1, [pc, 0xc0] | r1 = *(0x3249e);
0x000323dc ldr r3, [r3] | r3 = *(r3);
0x000323de ldr.w r4, [r3, r7, lsl 3] | offset_0 = r7 << 3;
| r4 = *((r3 + offset_0));
0x000323e0 ands r7, r6 | r7 &= r6;
0x000323e2 dmb ish | __asm ("dmb ish");
0x000323e4 ldrh r3, [r3, 0x3a] | r3 = *((r3 + 0x3a));
0x000323e6 add.w r3, r3, r7, lsl 3 | r3 += (r7 << 3);
0x000323ea ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000323ec dmb ish | __asm ("dmb ish");
0x000323f0 mov r0, r3 | r0 = r3;
| if (r3 == 0) {
0x000323f2 cbnz r3, 0x323fa |
0x000323f4 ldr.w r3, [fp, r1] | r3 = *((fp + r1));
0x000323f8 ldr r0, [r3] | r0 = *(r3);
| }
0x000323fa ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000323fe ldr.w ip, [pc, 0x9c] | ip = *(0x3249e);
0x00032402 ldr r3, [r3] | r3 = *(r3);
0x00032404 adds r1, r3, r6 | r1 = r3 + r6;
0x00032406 ldr.w r8, [r3, r6] | r8 = *((r3 + r6));
0x0003240a dmb ish | __asm ("dmb ish");
0x0003240e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00032410 dmb ish | __asm ("dmb ish");
0x00032414 mov r1, r3 | r1 = r3;
| if (r3 == 0) {
0x00032416 cbnz r3, 0x3241e |
0x00032418 ldr.w r3, [fp, ip] | r3 = *((fp + ip));
0x0003241c ldr r1, [r3] | r1 = *(r3);
| }
0x0003241e adds r6, 8 | r6 += 8;
0x00032420 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 != 0) {
0x00032424 cbnz r0, 0x32468 | goto label_8;
| }
| if (r7 == 0) {
| label_1:
0x00032426 cbz r7, 0x3242e | goto label_9;
| }
0x00032428 subs r7, 1 | r7--;
0x0003242a cmp r7, r5 |
0x0003242c bne 0x323d6 |
| } while (r7 != r5);
| label_9:
0x0003242e ldr r6, [sp, 4] | r6 = var_4h;
| label_7:
0x00032430 ldr r3, [sp] | r3 = *(sp);
0x00032432 ldrd r0, r1, [sp, 8] | __asm ("ldrd r0, r1, [var_8h]");
0x00032436 adds r4, r3, 1 | r4 = r3 + 1;
0x00032438 adc r2, r6, 0 | __asm ("adc r2, r6, 0");
0x0003243c str r4, [sp] | *(sp) = r4;
0x0003243e cmp r2, r0 |
0x00032440 it eq |
| if (r2 == r0) {
0x00032442 cmpeq r4, r1 | __asm ("cmpeq r4, r1");
| }
0x00032444 mov r6, r2 | r6 = r2;
| if (r2 == r0) {
0x00032446 beq 0x3247c | goto label_6;
| }
0x00032448 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0003244a movs r1, 0 | r1 = 0;
0x0003244c cmp r4, r0 |
0x0003244e mov r3, r0 | r3 = r0;
0x00032450 sbcs r0, r6, 0 | __asm ("sbcs r0, r6, 0");
0x00032454 itt lo |
| if (r4 >= r0) {
0x00032456 movlo r3, r4 | r3 = r4;
| }
| if (r4 >= r0) {
0x00032458 movlo r1, r6 | r1 = r6;
| }
0x0003245a cmp r3, r4 |
0x0003245c mov r7, r3 | r7 = r3;
0x0003245e sbcs r1, r2 | __asm ("sbcs r1, r2");
0x00032460 ite lo |
| if (r3 >= r4) {
0x00032462 sublo r4, r4, r3 | r4 -= r3;
| }
| if (r3 < r4) {
0x00032464 movhs r4, 0 | r4 = 0;
| }
0x00032466 b 0x323c2 | goto label_0;
| label_8:
0x00032468 mov r1, r8 | r1 = r8;
0x0003246a mov r0, r4 | r0 = r4;
0x0003246c bl 0x61d48 | r0 = gst_structure_can_intersect ();
0x00032470 cmp r0, 0 |
| if (r0 == 0) {
0x00032472 beq 0x32426 | goto label_1;
| }
| label_5:
0x00032474 movs r0, 1 | r0 = 1;
0x00032476 add sp, 0x1c |
0x00032478 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0003247c movs r0, 0 | r0 = 0;
0x0003247e b 0x3233e | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x317e4 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_copy_nth () | void gst_caps_copy_nth (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x000317e4 push {r4, r5, r6, r7, lr} |
0x000317e6 sub sp, 0xc |
0x000317e8 ldr r7, [pc, 0xb4] |
0x000317ea add r7, pc | r7 = 0x6308e;
| if (r0 != 0) {
0x000317ec cbz r0, 0x317fc |
0x000317ee ldr r3, [pc, 0xb4] |
0x000317f0 mov r4, r0 | r4 = r0;
0x000317f2 ldr r2, [r0] | r2 = *(r0);
0x000317f4 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000317f6 ldr r3, [r3] | r3 = *(0x318a6);
0x000317f8 cmp r2, r3 |
| if (r2 == r3) {
0x000317fa beq 0x31818 | goto label_2;
| }
| }
0x000317fc ldr r1, [pc, 0xa8] |
0x000317fe movs r5, 0 | r5 = 0;
0x00031800 ldr r3, [pc, 0xa8] | r3 = *(0x318ac);
0x00031802 ldr r2, [pc, 0xac] |
0x00031804 add r1, pc |
0x00031806 ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00031808 add.w r1, r1, 0x13c | r1 = 0x631ec;
0x0003180c add r2, pc | r2 = 0x630c2;
0x0003180e blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
| label_0:
0x00031812 mov r0, r5 | r0 = r5;
0x00031814 add sp, 0xc |
0x00031816 pop {r4, r5, r6, r7, pc} |
| label_2:
0x00031818 mov r6, r1 | r6 = r1;
0x0003181a bl 0x30dd8 | gst_caps_new_empty ();
0x0003181e ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00031820 mov r5, r0 | r5 = r0;
0x00031822 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00031824 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00031826 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00031828 cmp r2, r6 |
0x0003182a bls 0x31812 |
| } while (r2 < r6);
0x0003182c ldr r3, [r3] | r3 = *(r3);
0x0003182e ldr.w r0, [r3, r6, lsl 3] | offset_0 = r6 << 3;
| r0 = *((r3 + offset_0));
0x00031832 dmb ish | __asm ("dmb ish");
0x00031836 add.w r2, r3, r6, lsl 3 | r2 = r3 + (r6 << 3);
0x0003183a ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x0003183c dmb ish | __asm ("dmb ish");
0x00031840 bl 0x5ef68 | gst_structure_copy ();
0x00031842 invalid |
| if (r4 != 0) {
0x00031846 cbnz r4, 0x31874 | goto label_3;
| }
| label_1:
0x00031848 adds r6, r5, 4 | r6 = r5 + 4;
0x0003184a str r4, [sp, 4] | var_4h = r4;
0x0003184c mov r1, r6 | r1 = r6;
0x0003184e bl 0x5eee8 | r0 = gst_structure_set_parent_refcount ();
0x00031852 cmp r0, 0 |
| if (r0 == 0) {
0x00031854 beq 0x31812 | goto label_0;
| }
0x00031856 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 == 0) {
0x00031858 cbz r0, 0x31864 | goto label_4;
| }
0x0003185a mov r1, r6 | r1 = r6;
0x0003185c bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
0x00031860 cmp r0, 0 |
| if (r0 == 0) {
0x00031862 beq 0x31812 | goto label_0;
| }
| label_4:
0x00031864 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x00031866 movs r2, 1 | r2 = 1;
0x00031868 mov r1, sp | r1 = sp;
0x0003186a blx 0x208f8 | fcn_000208f8 ();
0x0003186c strex r6, r4, [r6, 0xa0] | __asm ("strex r6, r4, [r6, 0xa0]");
0x00031870 add sp, 0xc |
0x00031872 pop {r4, r5, r6, r7, pc} |
| label_3:
0x00031874 mov r0, r4 | r0 = r4;
0x00031876 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x0003187a mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0003187c cbnz r0, 0x31892 |
0x0003187e ldr r3, [pc, 0x34] | r3 = *(0x318b6);
0x00031880 mov r0, r4 | r0 = r4;
0x00031882 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00031884 ldr r1, [r3] | r1 = *(0x318b6);
0x00031886 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 == 0) {
0x0003188a cbz r0, 0x31892 | goto label_5;
| }
0x0003188c ldr r0, [sp] | r0 = *(sp);
0x0003188e mov r4, r6 | r4 = r6;
0x00031890 b 0x31848 | goto label_1;
| }
| label_5:
0x00031892 mov r0, r4 | r0 = r4;
0x00031894 bl 0x34224 | r0 = gst_caps_features_copy ();
0x00031898 mov r4, r0 | r4 = r0;
0x0003189a ldr r0, [sp] | r0 = *(sp);
0x0003189c b 0x31848 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32cc0 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_filter_and_map_in_place () | void gst_caps_filter_and_map_in_place (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00032cc0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032cc4 sub sp, 0xc |
0x00032cc6 ldr.w sl, [pc, 0x11c] |
0x00032cca str r1, [sp, 4] | var_4h = r1;
0x00032ccc add sl, pc | sl = 0x65ab6;
| if (r0 != 0) {
0x00032cce cbz r0, 0x32ce2 |
0x00032cd0 ldr r3, [pc, 0x114] |
0x00032cd2 mov sb, r2 | sb = r2;
0x00032cd4 ldr r2, [r0] | r2 = *(r0);
0x00032cd6 mov r6, r0 | r6 = r0;
0x00032cd8 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00032cdc ldr r3, [r3] | r3 = *(0x32de8);
0x00032cde cmp r2, r3 |
| if (r2 == r3) {
0x00032ce0 beq 0x32cfe | goto label_4;
| }
| }
0x00032ce2 ldr r1, [pc, 0x108] |
0x00032ce4 ldr r2, [pc, 0x108] |
0x00032ce6 ldr r3, [pc, 0x10c] | r3 = *(0x32df6);
0x00032ce8 add r1, pc | r1 = 0x65ada;
0x00032cea add r2, pc | r2 = 0x65ade;
| label_3:
0x00032cec ldr.w r0, [sl, r3] | r0 = *((sl + r3));
0x00032cf0 add.w r1, r1, 0x33c | r1 += 0x33c;
0x00032cf4 add sp, 0xc |
0x00032cf6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032cfa b.w 0x1fdcc | void (*0x1fdcc)() ();
| label_4:
0x00032cfe bl 0x486d8 | r0 = gst_mini_object_is_writable ();
0x00032d02 cmp r0, 0 |
| if (r0 == 0) {
0x00032d04 beq 0x32dca | goto label_5;
| }
0x00032d06 ldr r3, [sp, 4] | r3 = var_4h;
0x00032d08 cmp r3, 0 |
| if (r3 == 0) {
0x00032d0a beq 0x32dd6 | goto label_6;
| }
0x00032d0c ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00032d0e ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x00032d12 cmp.w r8, 0 |
| if (r8 == 0) {
0x00032d16 beq 0x32d9c | goto label_7;
| }
0x00032d18 movs r5, 0 | r5 = 0;
0x00032d1a b 0x32d34 |
| while (r4 != 0) {
0x00032d1c ldr r3, [sp, 4] | r3 = var_4h;
0x00032d1e mov r2, sb | r2 = sb;
0x00032d20 mov r1, r7 | r1 = r7;
0x00032d22 mov r0, r4 | r0 = r4;
0x00032d24 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00032d26 mov fp, r0 |
0x00032d28 cmp r0, 0 |
| if (r0 == 0) {
0x00032d2a beq 0x32da2 | goto label_8;
| }
| label_0:
0x00032d2c adds r5, 1 | r5++;
0x00032d2e cmp r8, r5 |
| if (r8 < r5) {
0x00032d30 bls 0x32d9c | goto label_7;
| }
| label_1:
0x00032d32 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00032d34 ldr r3, [r3] | r3 = *(r3);
0x00032d36 dmb ish | __asm ("dmb ish");
0x00032d3a add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x00032d3e ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00032d40 dmb ish | __asm ("dmb ish");
0x00032d44 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00032d46 ldr r3, [r3] | r3 = *(r3);
0x00032d48 ldr.w r7, [r3, r5, lsl 3] | offset_0 = r5 << 3;
| r7 = *((r3 + offset_0));
0x00032d4c cmp r4, 0 |
0x00032d4e bne 0x32d1c |
| }
0x00032d50 ldr r2, [pc, 0xa4] | r2 = *(0x32df8);
0x00032d52 ldr.w r2, [sl, r2] | r2 = *((sl + r2));
0x00032d56 ldr r0, [r2] | r0 = *(0x32df8);
0x00032d58 bl 0x34224 | gst_caps_features_copy ();
0x00032d5c mov r1, r5 | r1 = r5;
0x00032d5e mov r2, r0 | r2 = r0;
0x00032d60 mov r4, r0 | r4 = r0;
0x00032d62 mov r0, r6 | r0 = r6;
0x00032d64 bl 0x31668 | gst_caps_set_features ();
0x00032d68 ldr r3, [sp, 4] | r3 = var_4h;
0x00032d6a mov r2, sb | r2 = sb;
0x00032d6c mov r1, r7 | r1 = r7;
0x00032d6e mov r0, r4 | r0 = r4;
0x00032d70 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00032d72 mov fp, r0 |
0x00032d74 cmp r0, 0 |
| if (r0 != 0) {
0x00032d76 bne 0x32d2c | goto label_0;
| }
0x00032d78 mov r1, r5 | r1 = r5;
0x00032d7a ldr r0, [r6, 0x24] | r0 = *((r6 + 0x24));
0x00032d7c blx 0x1f79c | g_list_copy ();
0x00032d80 mov r1, fp | r1 = fp;
0x00032d82 str r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x00032d84 mov r0, r7 | r0 = r7;
0x00032d86 bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x00032d8a mov r0, r7 | r0 = r7;
0x00032d8c bl 0x5e698 | gst_structure_free ();
| if (r4 != 0) {
0x00032d90 cbnz r4, 0x32dba | goto label_9;
| }
| label_2:
0x00032d92 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00032d94 ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x00032d98 cmp r8, r5 |
| if (r8 > r5) {
0x00032d9a bhi 0x32d32 | goto label_1;
| }
| label_7:
0x00032d9c add sp, 0xc |
0x00032d9e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00032da2 mov r1, r5 | r1 = r5;
0x00032da4 ldr r0, [r6, 0x24] | r0 = *((r6 + 0x24));
0x00032da6 blx 0x1f79c | g_list_copy ();
0x00032daa mov r1, fp | r1 = fp;
0x00032dac str r0, [r6, 0x24] | *((r6 + 0x24)) = r0;
0x00032dae mov r0, r7 | r0 = r7;
0x00032db0 bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x00032db4 mov r0, r7 | r0 = r7;
0x00032db6 bl 0x5e698 | gst_structure_free ();
| label_9:
0x00032dba movs r1, 0 | r1 = 0;
0x00032dbc mov r0, r4 | r0 = r4;
0x00032dbe bl 0x33ab8 | gst_caps_features_set_parent_refcount ();
0x00032dc2 mov r0, r4 | r0 = r4;
0x00032dc4 bl 0x339b8 | gst_caps_features_free ();
0x00032dc8 b 0x32d92 | goto label_2;
| label_5:
0x00032dca ldr r1, [pc, 0x30] |
0x00032dcc ldr r2, [pc, 0x30] |
0x00032dce ldr r3, [pc, 0x24] | r3 = *(0x32df6);
0x00032dd0 add r1, pc | r1 = 0x65bd2;
0x00032dd2 add r2, pc | r2 = 0x65bd6;
0x00032dd4 b 0x32cec | goto label_3;
| label_6:
0x00032dd6 ldr r1, [pc, 0x2c] |
0x00032dd8 ldr r2, [pc, 0x2c] |
0x00032dda ldr r3, [pc, 0x18] | r3 = *(0x32df6);
0x00032ddc add r1, pc | r1 = 0x65be6;
0x00032dde add r2, pc | r2 = 0x65bea;
0x00032de0 b 0x32cec | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x3158c */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_get_features () | void gst_caps_get_features (uint32_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0003158c ldr r3, [pc, 0xb8] |
0x0003158e push {r4, r5, r6, lr} |
0x00031590 add r3, pc | r3 = 0x62bdc;
| if (r0 != 0) {
0x00031592 cbz r0, 0x315a2 |
0x00031594 ldr r2, [pc, 0xb4] |
0x00031596 mov r6, r0 | r6 = r0;
0x00031598 ldr r0, [r0] | r0 = *(r0);
0x0003159a ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x0003159c ldr r2, [r2] | r2 = *(0x3164c);
0x0003159e cmp r0, r2 |
| if (r0 == r2) {
0x000315a0 beq 0x315ba | goto label_1;
| }
| }
0x000315a2 ldr r1, [pc, 0xac] |
0x000315a4 movs r4, 0 | r4 = 0;
0x000315a6 ldr r0, [pc, 0xac] | r0 = *(0x31656);
0x000315a8 ldr r2, [pc, 0xac] |
0x000315aa add r1, pc | r1 = 0x62c00;
0x000315ac ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x000315ae adds r1, 0xec | r1 += 0xec;
0x000315b0 add r2, pc | r2 = 0x62c0c;
0x000315b2 blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
| label_0:
0x000315b6 mov r0, r4 | r0 = r4;
0x000315b8 pop {r4, r5, r6, pc} |
| label_1:
0x000315ba ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x000315bc ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x000315be cmp r0, r1 |
| if (r0 < r1) {
0x000315c0 bls 0x3162e | goto label_2;
| }
0x000315c2 ldr r2, [r2] | r2 = *(r2);
0x000315c4 lsls r5, r1, 3 | r5 = r1 << 3;
0x000315c6 dmb ish | __asm ("dmb ish");
0x000315ca add r2, r5 | r2 += r5;
0x000315cc ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x000315ce dmb ish | __asm ("dmb ish");
0x000315d2 cmp r4, 0 |
0x000315d4 bne 0x315b6 |
| } while (r4 != 0);
0x000315d6 ldr r2, [pc, 0x84] | r2 = *(0x3165e);
0x000315d8 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x000315da ldr r0, [r3] | r0 = *(r3);
0x000315dc bl 0x34224 | gst_caps_features_copy ();
0x000315e0 adds r1, r6, 4 | r1 = r6 + 4;
0x000315e2 mov r4, r0 | r4 = r0;
0x000315e4 bl 0x33ab8 | gst_caps_features_set_parent_refcount ();
0x000315e6 invalid |
0x000315ea ldr r3, [r3] | r3 = *(r3);
0x000315ec dmb ish | __asm ("dmb ish");
0x000315f0 add r3, r5 | r3 += r5;
0x000315f2 adds r3, 4 | r3 += 4;
| do {
0x000315f4 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x000315f8 cmp r2, 0 |
| if (r2 != 0) {
0x000315fa bne 0x31604 | goto label_3;
| }
0x000315fc strex r1, r4, [r3] | __asm ("strex r1, r4, [r3]");
0x00031600 cmp r1, 0 |
0x00031602 bne 0x315f4 |
| } while (r1 != 0);
| label_3:
0x00031604 ite eq |
| if (r1 != 0) {
0x00031606 moveq r1, 1 | r1 = 1;
| }
| if (r1 == 0) {
0x00031608 movne r1, 0 | r1 = 0;
| }
0x0003160a dmb ish | __asm ("dmb ish");
| if (r1 == 0) {
0x0003160e beq 0x315b6 | goto label_0;
| }
0x00031610 mov r0, r4 | r0 = r4;
0x00031612 bl 0x33ab8 | gst_caps_features_set_parent_refcount ();
0x00031616 mov r0, r4 | r0 = r4;
0x00031618 bl 0x339b8 | gst_caps_features_free ();
0x0003161c ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0003161e ldr r3, [r3] | r3 = *(r3);
0x00031620 dmb ish | __asm ("dmb ish");
0x00031624 add r3, r5 | r3 += r5;
0x00031626 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00031628 dmb ish | __asm ("dmb ish");
0x0003162c b 0x315b6 | goto label_0;
| label_2:
0x0003162e ldr r1, [pc, 0x30] |
0x00031630 movs r4, 0 | r4 = 0;
0x00031632 ldr r0, [pc, 0x20] | r0 = *(0x31656);
0x00031634 ldr r2, [pc, 0x2c] |
0x00031636 add r1, pc | r1 = 0x62c9c;
0x00031638 ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x0003163a adds r1, 0xec | r1 += 0xec;
0x0003163c add r2, pc | r2 = 0x62ca4;
0x0003163e blx 0x1fdd0 | fcn_0001fdd0 ();
0x00031642 mov r0, r4 | r0 = r4;
0x00031644 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32e14 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_intersect_full () | void gst_caps_intersect_full (int16_t arg_24h, uint32_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00032e14 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00032e18 sub sp, 0x24 |
0x00032e1a ldr r6, [pc, 0x318] |
0x00032e1c add r6, pc | r6 = 0x65f56;
| if (r0 != 0) {
0x00032e1e cbz r0, 0x32e32 |
0x00032e20 mov r3, r2 | r3 = r2;
0x00032e22 ldr r2, [pc, 0x314] | r2 = *(0x3313a);
0x00032e24 mov r5, r1 | r5 = r1;
0x00032e26 mov fp, r0 |
0x00032e28 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00032e2a ldr r1, [r2] | r1 = *(0x3313a);
0x00032e2c ldr r2, [r0] | r2 = *(r0);
0x00032e2e cmp r2, r1 |
| if (r2 == r1) {
0x00032e30 beq 0x32e52 | goto label_11;
| }
| }
0x00032e32 ldr r1, [pc, 0x308] |
0x00032e34 ldr r2, [pc, 0x308] |
0x00032e36 ldr r3, [pc, 0x30c] | r3 = *(0x33146);
0x00032e38 add r1, pc | r1 = 0x65f7a;
0x00032e3a add r2, pc | r2 = 0x65f7e;
| do {
0x00032e3c ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x00032e3e add.w r1, r1, 0x360 | r1 += 0x360;
0x00032e42 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032e46 movs r3, 0 | r3 = 0;
0x00032e48 str r3, [sp, 8] | var_8h = r3;
| label_1:
0x00032e4a ldr r0, [sp, 8] | r0 = var_8h;
0x00032e4c add sp, 0x24 |
0x00032e4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r5 != 0) {
| label_11:
0x00032e52 cbz r5, 0x32e5a |
0x00032e54 ldr r1, [r5] | r1 = *(r5);
0x00032e56 cmp r2, r1 |
| if (r2 == r1) {
0x00032e58 beq 0x32e66 | goto label_12;
| }
| }
0x00032e5a ldr r1, [pc, 0x2ec] |
0x00032e5c ldr r2, [pc, 0x2ec] |
0x00032e5e ldr r3, [pc, 0x2e4] | r3 = *(0x33146);
0x00032e60 add r1, pc | r1 = 0x65fae;
0x00032e62 add r2, pc | r2 = 0x65fb2;
0x00032e64 b 0x32e3c |
| } while (1);
| label_12:
0x00032e66 cmp r0, r5 |
| if (r0 != r5) {
0x00032e68 beq 0x32e90 |
0x00032e6a ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00032e6c ands r4, r2, 0x10 | r4 = r2 & 0x10;
| if (r4 != r2) {
0x00032e70 bne 0x32e9c | goto label_13;
| }
0x00032e72 ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
| if (r2 != 0) {
0x00032e74 cbz r2, 0x32e88 |
0x00032e76 ldr r2, [r2, 4] | r2 = *((r2 + 4));
| if (r2 == 0) {
0x00032e78 cbz r2, 0x32e88 | goto label_14;
| }
0x00032e7a ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00032e7c lsls r0, r2, 0x1b | r0 = r2 << 0x1b;
| if (r0 < r2) {
0x00032e7e bmi 0x32e90 | goto label_0;
| }
0x00032e80 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
| if (r1 == 0) {
0x00032e82 cbz r1, 0x32e88 | goto label_14;
| }
0x00032e84 ldr r1, [r1, 4] | r1 = *((r1 + 4));
| if (r1 != 0) {
0x00032e86 cbnz r1, 0x32eae | goto label_15;
| }
| }
| label_14:
0x00032e88 ldr r3, [pc, 0x2c4] | r3 = *(0x33150);
0x00032e8a ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00032e8c ldr r0, [r3] | r0 = *(0x33150);
0x00032e8e b 0x32e92 |
| } else {
| label_0:
0x00032e90 mov r0, fp | r0 = fp;
| }
0x00032e92 add sp, 0x24 |
0x00032e94 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032e98 b.w 0x32e10 | void (*0x32e10)() ();
0x00032e9a itte lt |
| if (r1 >= 0) {
| label_13:
0x00032e9c ldrlt r2, [r5, 0xc] | r2 = *((r5 + 0xc));
| }
| if (r1 >= 0) {
0x00032e9e lsllt r1, r2, 0x1b | r1 = r2 << 0x1b;
| }
0x00032ea0 bge 0x32e80 |
| while (r4 != 0) {
0x00032ea2 mov r0, r5 | r0 = r5;
0x00032ea4 add sp, 0x24 |
0x00032ea6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032eaa b.w 0x32e10 | void (*0x32e10)() ();
| label_15:
0x00032eae cmp r4, 0 |
0x00032eb0 bne 0x32ea2 |
| }
0x00032eb2 lsls r7, r2, 0x1b | r7 = r2 << 0x1b;
| if (r7 < r2) {
0x00032eb4 bmi 0x32e90 | goto label_0;
| }
0x00032eb6 cmp r3, 0 |
| if (r3 == 0) {
0x00032eb8 beq.w 0x32fda | goto label_16;
| }
0x00032ebc cmp r3, 1 |
| if (r3 != 1) {
0x00032ebe bne.w 0x32fcc | goto label_17;
| }
0x00032ec2 bl 0x30dd8 | gst_caps_new_empty ();
0x00032ec6 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00032ec8 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x00032ecc str r0, [sp, 8] | var_8h = r0;
0x00032ece ldr.w sb, [r2, 4] | sb = *((r2 + 4));
0x00032ed2 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00032ed4 str r2, [sp, 0xc] | var_ch = r2;
0x00032ed6 cmp r2, 0 |
| if (r2 == 0) {
0x00032ed8 beq 0x32e4a | goto label_1;
| }
0x00032eda mov r2, r5 | r2 = r5;
0x00032edc mov sl, r0 | sl = r0;
0x00032ede mov r5, sb | r5 = sb;
0x00032ee0 mov sb, r2 | sb = r2;
0x00032ee2 str r4, [sp, 4] | var_4h = r4;
0x00032ee4 str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
| label_4:
0x00032ee8 ldr r3, [r3] | r3 = *(r3);
0x00032eea ldr r2, [sp, 4] | r2 = var_4h;
0x00032eec ldr.w r1, [r3, r2, lsl 3] | offset_0 = r2 << 3;
| r1 = *((r3 + offset_0));
0x00032ef0 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x00032ef4 str r1, [sp] | *(sp) = r1;
0x00032ef6 dmb ish | __asm ("dmb ish");
0x00032efa ldr r7, [r3, 4] | r7 = *((r3 + 4));
0x00032efc dmb ish | __asm ("dmb ish");
| if (r7 == 0) {
0x00032f00 cbnz r7, 0x32f08 |
0x00032f02 ldr r3, [pc, 0x250] | r3 = *(0x33156);
0x00032f04 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00032f06 ldr r7, [r3] | r7 = *(0x33156);
| }
0x00032f08 cmp r5, 0 |
| if (r5 == 0) {
0x00032f0a beq 0x32f8e | goto label_18;
| }
0x00032f0c mov.w fp, 0 |
0x00032f10 b 0x32f1a |
| while (r4 == 0) {
| label_2:
0x00032f12 add.w fp, fp, 1 |
0x00032f16 cmp r5, fp |
| if (r5 == fp) {
0x00032f18 beq 0x32f8e | goto label_18;
| }
| label_3:
0x00032f1a ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x00032f1e ldr r2, [r2] | r2 = *(r2);
0x00032f20 ldr.w r8, [r2, fp, lsl 3] | offset_1 = fp << 3;
| r8 = *((r2 + offset_1));
0x00032f24 dmb ish | __asm ("dmb ish");
0x00032f28 add.w r2, r2, fp, lsl 3 | r2 += (fp << 3);
0x00032f2c ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x00032f2e dmb ish | __asm ("dmb ish");
| if (r4 == 0) {
0x00032f32 cbnz r4, 0x32f3a |
0x00032f34 ldr r2, [pc, 0x21c] | r2 = *(0x33154);
0x00032f36 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00032f38 ldr r4, [r2] | r4 = *(0x33154);
| }
0x00032f3a mov r1, r4 | r1 = r4;
0x00032f3c mov r0, r7 | r0 = r7;
0x00032f3e bl 0x33e98 | gst_caps_features_is_equal ();
0x00032f40 vmlal.u32 q1, d11, d0 | __asm ("vmlal.u32 q1, d11, d0");
0x00032f44 beq 0x32f12 |
| }
0x00032f46 mov r1, r8 | r1 = r8;
0x00032f48 ldr r0, [sp] | r0 = *(sp);
0x00032f4a bl 0x61c00 | r0 = gst_structure_intersect ();
0x00032f4e mov r8, r0 | r8 = r0;
0x00032f50 cmp r0, 0 |
| if (r0 == 0) {
0x00032f52 beq 0x32f12 | goto label_2;
| }
0x00032f54 mov r0, r7 | r0 = r7;
0x00032f56 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 == 0) {
0x00032f5a cbz r0, 0x32fa6 | goto label_19;
| }
| if (r4 == 0) {
0x00032f5c cbz r4, 0x32fa2 | goto label_6;
| }
0x00032f5e mov r0, r4 | r0 = r4;
0x00032f60 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 == 0) {
0x00032f64 cbnz r0, 0x32f74 |
0x00032f66 ldr r2, [pc, 0x1ec] | r2 = *(0x33156);
0x00032f68 mov r0, r4 | r0 = r4;
0x00032f6a ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00032f6c ldr r1, [r2] | r1 = *(0x33156);
0x00032f6e bl 0x33e98 | gst_caps_features_is_equal ();
0x00032f70 invalid |
| }
0x00032f74 mov r0, r4 | r0 = r4;
0x00032f76 bl 0x34224 | r0 = gst_caps_features_copy ();
0x00032f7a mov r2, r0 | r2 = r0;
| label_5:
0x00032f7c mov r0, sl | r0 = sl;
0x00032f7e mov r1, r8 | r1 = r8;
0x00032f80 add.w fp, fp, 1 |
0x00032f84 bl 0x31328 | gst_caps_merge_structure_full ();
0x00032f88 cmp r5, fp |
0x00032f8a mov sl, r0 | sl = r0;
| if (r5 != fp) {
0x00032f8c bne 0x32f1a | goto label_3;
| }
| label_18:
0x00032f8e ldr r3, [sp, 4] | r3 = var_4h;
0x00032f90 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00032f92 adds r3, 1 | r3++;
0x00032f94 cmp r2, r3 |
0x00032f96 str r3, [sp, 4] | var_4h = r3;
| if (r2 == r3) {
0x00032f98 beq.w 0x33128 | goto label_20;
| }
0x00032f9c ldr r3, [sp, 8] | r3 = var_8h;
0x00032f9e ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x00032fa0 b 0x32ee8 | goto label_4;
| do {
| label_6:
0x00032fa2 movs r2, 0 | r2 = 0;
0x00032fa4 b 0x32f7c | goto label_5;
| label_19:
0x00032fa6 cmp r7, 0 |
0x00032fa8 beq 0x32fa2 |
| } while (r7 == 0);
0x00032faa mov r0, r7 | r0 = r7;
0x00032fac bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 != 0) {
0x00032fb0 cbnz r0, 0x32fc2 | goto label_21;
| }
0x00032fb2 ldr r2, [pc, 0x1a0] | r2 = *(0x33156);
0x00032fb4 mov r0, r7 | r0 = r7;
0x00032fb6 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x00032fb8 ldr r1, [r2] | r1 = *(0x33156);
0x00032fba bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00032fbe cmp r0, 0 |
| if (r0 != 0) {
0x00032fc0 bne 0x32fa2 | goto label_6;
| }
| label_21:
0x00032fc2 mov r0, r7 | r0 = r7;
0x00032fc4 bl 0x34224 | r0 = gst_caps_features_copy ();
0x00032fc8 mov r2, r0 | r2 = r0;
0x00032fca b 0x32f7c | goto label_5;
| label_17:
0x00032fcc ldr r2, [pc, 0x174] | r2 = *(0x33144);
0x00032fce movs r1, 0x10 | r1 = 0x10;
0x00032fd0 ldr r0, [r6, r2] | r0 = *((r6 + r2));
0x00032fd2 ldr r2, [pc, 0x184] |
0x00032fd4 add r2, pc | r2 = 0x66132;
0x00032fd6 blx 0x20930 | g_param_spec_ref ();
| label_16:
0x00032fda bl 0x30dd8 | gst_caps_new_empty ();
0x00032fde ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00032fe0 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x00032fe4 str r0, [sp, 8] | var_8h = r0;
0x00032fe6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00032fe8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00032fea str r2, [sp, 0x14] | var_14h = r2;
0x00032fec subs r2, 1 | r2--;
0x00032fee add r2, r3 | r2 += r3;
0x00032ff0 str r2, [sp, 0x18] | var_18h = r2;
0x00032ff2 cmp r2, 0 |
| if (r2 == 0) {
0x00032ff4 beq.w 0x32e4a | goto label_1;
| }
0x00032ff8 mov.w sl, 0 | sl = 0;
0x00032ffc mov sb, r6 | sb = r6;
0x00032ffe mov r4, sl | r4 = sl;
0x00033000 mov r8, sl | r8 = sl;
0x00033002 strd sl, sl, [sp, 0xc] | __asm ("strd sl, sl, [var_ch]");
0x00033006 mov sl, r5 | sl = r5;
0x00033008 subs r3, 1 | r3--;
0x0003300a str r3, [sp, 0x1c] | var_1ch = r3;
| label_7:
0x0003300c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0003300e cmp r2, r4 |
| if (r2 < r4) {
0x00033010 bls 0x3307a | goto label_22;
| }
0x00033012 add.w r3, r8, r4 | r3 = r8 + r4;
0x00033016 lsls r4, r4, 3 | r4 <<= 3;
0x00033018 subs r3, r3, r2 | r3 -= r2;
0x0003301a str r3, [sp, 4] | var_4h = r3;
| do {
0x0003301c ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00033020 ldr r2, [r2] | r2 = *(r2);
0x00033022 ldr.w r6, [r2, r8, lsl 3] | offset_2 = r8 << 3;
| r6 = *((r2 + offset_2));
0x00033026 dmb ish | __asm ("dmb ish");
0x0003302a add.w r2, r2, r8, lsl 3 | r2 += (r8 << 3);
0x0003302e ldr r7, [r2, 4] | r7 = *((r2 + 4));
0x00033030 dmb ish | __asm ("dmb ish");
| if (r7 == 0) {
0x00033034 cbnz r7, 0x3303e |
0x00033036 ldr r2, [pc, 0x11c] | r2 = *(0x33156);
0x00033038 ldr.w r2, [sb, r2] | r2 = *((sb + r2));
0x0003303c ldr r7, [r2] | r7 = *(0x33156);
| }
0x0003303e ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x00033042 ldr r1, [r1] | r1 = *(r1);
0x00033044 ldr r3, [r1, r4] | r3 = *((r1 + r4));
0x00033046 adds r0, r1, r4 | r0 = r1 + r4;
0x00033048 str r3, [sp] | *(sp) = r3;
0x0003304a dmb ish | __asm ("dmb ish");
0x0003304e ldr r5, [r0, 4] | r5 = *((r0 + 4));
0x00033050 dmb ish | __asm ("dmb ish");
| if (r5 == 0) {
0x00033054 cbnz r5, 0x3305e |
0x00033056 ldr r1, [pc, 0xfc] | r1 = *(0x33156);
0x00033058 ldr.w r1, [sb, r1] | r1 = *((sb + r1));
0x0003305c ldr r5, [r1] | r5 = *(0x33156);
| }
0x0003305e mov r1, r5 | r1 = r5;
0x00033060 mov r0, r7 | r0 = r7;
0x00033062 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 != 0) {
0x00033066 cbnz r0, 0x330b8 | goto label_23;
| }
| label_8:
0x00033068 cmp.w r8, 0 |
| if (r8 == 0) {
0x0003306c beq 0x3307a | goto label_22;
| }
0x0003306e ldr r3, [sp, 4] | r3 = var_4h;
0x00033070 add.w r8, r8, -1 | r8 += -1;
0x00033074 adds r4, 8 | r4 += 8;
0x00033076 cmp r8, r3 |
0x00033078 bne 0x3301c |
| } while (r8 != r3);
| label_22:
0x0003307a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0003307c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0003307e adds r4, r3, 1 | r4 = r3 + 1;
0x00033080 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00033082 str r4, [sp, 0xc] | var_ch = r4;
0x00033084 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x00033088 cmp r1, 0 |
0x0003308a it eq |
| if (r1 == 0) {
0x0003308c cmpeq r4, r2 | __asm ("cmpeq r4, r2");
| }
0x0003308e str r1, [sp, 0x10] | var_10h = r1;
| if (r1 == 0) {
0x00033090 beq.w 0x32e4a | goto label_1;
| }
0x00033094 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00033096 movs r2, 0 | r2 = 0;
0x00033098 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0003309a ldr r6, [sp, 0x10] | r6 = var_10h;
0x0003309c mov r3, r0 | r3 = r0;
0x0003309e cmp r5, r0 |
0x000330a0 sbcs r0, r6, 0 | __asm ("sbcs r0, r6, 0");
0x000330a4 itt lo |
| if (r5 >= r0) {
0x000330a6 movlo r3, r5 | r3 = r5;
| }
| if (r5 >= r0) {
0x000330a8 movlo r2, r6 | r2 = r6;
| }
0x000330aa cmp r3, r4 |
0x000330ac mov r8, r3 | r8 = r3;
0x000330ae sbcs r2, r1 | __asm ("sbcs r2, r1");
0x000330b0 ite lo |
| if (r3 >= r4) {
0x000330b2 sublo r4, r4, r3 | r4 -= r3;
| }
| if (r3 < r4) {
0x000330b4 movhs r4, 0 | r4 = 0;
| }
0x000330b6 b 0x3300c | goto label_7;
| label_23:
0x000330b8 mov r0, r6 | r0 = r6;
0x000330ba ldr r1, [sp] | r1 = *(sp);
0x000330bc bl 0x61c00 | r0 = gst_structure_intersect ();
0x000330c0 mov r6, r0 | r6 = r0;
0x000330c2 cmp r0, 0 |
| if (r0 == 0) {
0x000330c4 beq 0x33068 | goto label_8;
| }
0x000330c6 mov r0, r7 | r0 = r7;
0x000330c8 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 == 0) {
0x000330cc cbz r0, 0x33100 | goto label_24;
| }
| if (r5 == 0) {
0x000330ce cbz r5, 0x330fc | goto label_9;
| }
0x000330d0 mov r0, r5 | r0 = r5;
0x000330d2 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 == 0) {
0x000330d6 cbnz r0, 0x330e8 |
0x000330d8 ldr r2, [pc, 0x78] | r2 = *(0x33154);
0x000330da mov r0, r5 | r0 = r5;
0x000330dc ldr.w r2, [sb, r2] | r2 = *((sb + r2));
0x000330e0 ldr r1, [r2] | r1 = *(0x33154);
0x000330e2 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 != 0) {
0x000330e6 cbnz r0, 0x330fc | goto label_9;
| }
| }
0x000330e8 mov r0, r5 | r0 = r5;
0x000330ea bl 0x34224 | r0 = gst_caps_features_copy ();
0x000330ee mov r2, r0 | r2 = r0;
| do {
| label_10:
0x000330f0 ldr r0, [sp, 8] | r0 = var_8h;
0x000330f2 mov r1, r6 | r1 = r6;
0x000330f4 bl 0x31328 | gst_caps_merge_structure_full ();
0x000330f8 str r0, [sp, 8] | var_8h = r0;
0x000330fa b 0x33068 | goto label_8;
| label_9:
0x000330fc movs r2, 0 | r2 = 0;
0x000330fe b 0x330f0 |
| } while (1);
| label_24:
0x00033100 cmp r7, 0 |
| if (r7 == 0) {
0x00033102 beq 0x330fc | goto label_9;
| }
0x00033104 mov r0, r7 | r0 = r7;
0x00033106 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 != 0) {
0x0003310a cbnz r0, 0x3311e | goto label_25;
| }
0x0003310c ldr r1, [pc, 0x44] |
0x0003310e mov r0, r7 | r0 = r7;
0x00033110 ldr.w r1, [sb, r1] | r1 = *((sb + r1));
0x00033114 ldr r1, [r1] | r1 = *(0x33154);
0x00033116 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x0003311a cmp r0, 0 |
| if (r0 != 0) {
0x0003311c bne 0x330fc | goto label_9;
| }
| label_25:
0x0003311e mov r0, r7 | r0 = r7;
0x00033120 bl 0x34224 | r0 = gst_caps_features_copy ();
0x00033124 mov r2, r0 | r2 = r0;
0x00033126 b 0x330f0 | goto label_10;
| label_20:
0x00033128 str.w sl, [sp, 8] | __asm ("str.w sl, [var_8h]");
0x0003312c ldr r0, [sp, 8] | r0 = var_8h;
0x0003312e add sp, 0x24 |
0x00033130 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31d34 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_equal_fixed () | void gst_caps_is_equal_fixed (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00031d34 push {r3, r4, r5, r6, r7, lr} |
0x00031d36 mov r6, r0 | r6 = r0;
0x00031d38 ldr r7, [pc, 0x90] |
0x00031d3a mov r5, r1 | r5 = r1;
0x00031d3c bl 0x31cb4 | gst_caps_is_fixed ();
0x00031d40 add r7, pc | r7 = 0x63b10;
| if (r0 != 0) {
0x00031d42 cbnz r0, 0x31d5e | goto label_0;
| }
0x00031d44 ldr r1, [pc, 0x88] |
0x00031d46 mov r4, r0 | r4 = r0;
0x00031d48 ldr r3, [pc, 0x88] | r3 = *(0x31dd4);
0x00031d4a ldr r2, [pc, 0x8c] |
0x00031d4c add r1, pc |
0x00031d4e ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00031d50 add.w r1, r1, 0x1e0 | r1 = 0x63d00;
0x00031d54 add r2, pc | r2 = 0x63b32;
0x00031d56 blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
0x00031d5a mov r0, r4 | r0 = r4;
0x00031d5c pop {r3, r4, r5, r6, r7, pc} |
| label_0:
0x00031d5e mov r0, r5 | r0 = r5;
0x00031d60 bl 0x31cb4 | r0 = gst_caps_is_fixed ();
0x00031d64 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00031d66 cbz r0, 0x31db4 | goto label_1;
| }
0x00031d68 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00031d6a ldr r3, [r3] | r3 = *(r3);
0x00031d6c ldr r0, [r3] | r0 = *(r3);
0x00031d6e dmb ish | __asm ("dmb ish");
0x00031d72 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x00031d74 dmb ish | __asm ("dmb ish");
| if (r6 == 0) {
0x00031d78 cbnz r6, 0x31d80 |
0x00031d7a ldr r3, [pc, 0x60] | r3 = *(0x31dde);
0x00031d7c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00031d7e ldr r6, [r3] | r6 = *(0x31dde);
| }
0x00031d80 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00031d82 ldr r3, [r3] | r3 = *(r3);
0x00031d84 ldr r1, [r3] | r1 = *(r3);
0x00031d86 dmb ish | __asm ("dmb ish");
0x00031d8a ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x00031d8c dmb ish | __asm ("dmb ish");
| if (r5 == 0) {
0x00031d90 cbnz r5, 0x31d98 |
0x00031d92 ldr r3, [pc, 0x48] | r3 = *(0x31dde);
0x00031d94 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00031d96 ldr r5, [r3] | r5 = *(0x31dde);
| }
0x00031d98 bl 0x61b60 | r0 = gst_structure_is_equal ();
0x00031d9c mov r4, r0 | r4 = r0;
0x00031d9e cmp r0, 0 |
0x00031da0 beq 0x31d5a |
| } while (r0 == 0);
0x00031da2 mov r1, r5 | r1 = r5;
0x00031da4 mov r0, r6 | r0 = r6;
0x00031da6 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00031daa subs r4, r0, 0 | r4 = r0 - 0;
0x00031dac it ne |
| if (r4 == r0) {
0x00031dae movne r4, 1 | r4 = 1;
| }
0x00031db0 mov r0, r4 | r0 = r4;
0x00031db2 pop {r3, r4, r5, r6, r7, pc} |
| label_1:
0x00031db4 ldr r1, [pc, 0x28] |
0x00031db6 ldr r3, [pc, 0x1c] | r3 = *(0x31dd6);
0x00031db8 ldr r2, [pc, 0x28] |
0x00031dba add r1, pc |
0x00031dbc ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00031dbe add.w r1, r1, 0x1e0 | r1 = 0x63d7e;
0x00031dc2 add r2, pc | r2 = 0x63baa;
0x00031dc4 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00031dc8 mov r0, r4 | r0 = r4;
0x00031dca pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x321d4 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_strictly_equal () | void gst_caps_is_strictly_equal (uint32_t arg1, int16_t arg2) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x000321d4 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x000321d8 sub sp, 0xc |
0x000321da ldr.w r8, [pc, 0x10c] |
0x000321de add r8, pc | r8 = 0x644cc;
| if (r0 != 0) {
0x000321e0 cbz r0, 0x321f2 |
0x000321e2 ldr r3, [pc, 0x108] |
0x000321e4 mov r5, r0 | r5 = r0;
0x000321e6 ldr r2, [r0] | r2 = *(r0);
0x000321e8 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000321ec ldr r3, [r3] | r3 = *(0x322ee);
0x000321ee cmp r2, r3 |
| if (r2 == r3) {
0x000321f0 beq 0x32210 | goto label_1;
| }
| }
0x000321f2 ldr r1, [pc, 0xfc] |
0x000321f4 ldr r3, [pc, 0xfc] | r3 = *(0x322f4);
0x000321f6 ldr r2, [pc, 0x100] |
0x000321f8 add r1, pc |
0x000321fa ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000321fe add.w r1, r1, 0x284 | r1 = 0x64772;
0x00032202 add r2, pc | r2 = 0x64500;
0x00032204 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032208 movs r0, 0 | r0 = 0;
| label_0:
0x0003220a add sp, 0xc |
0x0003220c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x00032210 mov r6, r1 | r6 = r1;
| if (r1 != 0) {
0x00032212 cbz r1, 0x3221a |
0x00032214 ldr r3, [r1] | r3 = *(r1);
0x00032216 cmp r2, r3 |
| if (r2 == r3) {
0x00032218 beq 0x32238 | goto label_2;
| }
| }
0x0003221a ldr r1, [pc, 0xe0] |
0x0003221c ldr r3, [pc, 0xd4] | r3 = *(0x322f4);
0x0003221e ldr r2, [pc, 0xe0] |
0x00032220 add r1, pc |
0x00032222 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00032226 add.w r1, r1, 0x284 | r1 = 0x647a6;
0x0003222a add r2, pc | r2 = 0x64530;
0x0003222c blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032230 movs r0, 0 | r0 = 0;
0x00032232 add sp, 0xc |
0x00032234 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00032238 cmp r0, r1 |
| if (r0 == r1) {
0x0003223a beq 0x322e4 | goto label_3;
| }
0x0003223c ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0003223e ldr r4, [r1, 0xc] | r4 = *((r1 + 0xc));
0x00032240 lsls r3, r3, 0x1b | r3 <<= 0x1b;
0x00032242 and r4, r4, 0x10 | r4 &= 0x10;
| if (r3 < r3) {
0x00032246 bmi 0x322dc | goto label_4;
| }
0x00032248 cmp r4, 0 |
| if (r4 != 0) {
0x0003224a bne 0x322d4 | goto label_5;
| }
0x0003224c ldr r2, [r1, 0x24] | r2 = *((r1 + 0x24));
0x0003224e ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x00032250 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00032252 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00032254 cmp r2, r1 |
| if (r2 != r1) {
0x00032256 bne 0x322d4 | goto label_5;
| }
| if (r2 != 0) {
0x00032258 cbnz r2, 0x32278 | goto label_6;
| }
0x0003225a b 0x322e4 | goto label_3;
| do {
0x0003225c bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00032260 mov r3, r0 | r3 = r0;
0x00032262 mov r1, sl | r1 = sl;
0x00032264 mov r0, sb | r0 = sb;
0x00032266 cmp r3, 0 |
| if (r3 == 0) {
0x00032268 beq 0x322d4 | goto label_5;
| }
0x0003226a bl 0x61b60 | r0 = gst_structure_is_equal ();
| if (r0 == 0) {
0x0003226e cbz r0, 0x322d4 | goto label_5;
| }
0x00032270 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00032272 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00032274 cmp r2, r4 |
| if (r2 < r4) {
0x00032276 bls 0x322e4 | goto label_3;
| }
| label_6:
0x00032278 ldr r2, [r3] | r2 = *(r3);
0x0003227a lsls r3, r4, 3 | r3 = r4 << 3;
0x0003227c ldr r0, [pc, 0x84] | r0 = *(0x32304);
0x0003227e adds r1, r2, r3 | r1 = r2 + r3;
0x00032280 ldr.w sb, [r2, r4, lsl 3] | offset_0 = r4 << 3;
| sb = *((r2 + offset_0));
0x00032284 dmb ish | __asm ("dmb ish");
0x00032288 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0003228a dmb ish | __asm ("dmb ish");
0x0003228e mov fp, r2 |
| if (r2 == 0) {
0x00032290 cbnz r2, 0x3229a |
0x00032292 ldr.w r2, [r8, r0] | r2 = *((r8 + r0));
0x00032296 ldr.w fp, [r2] | fp = *(r2);
| }
0x0003229a ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x0003229c ldr r0, [pc, 0x64] | r0 = *(0x32304);
0x0003229e ldr r2, [r2] | r2 = *(r2);
0x000322a0 adds r1, r2, r3 | r1 = r2 + r3;
0x000322a2 ldr.w sl, [r2, r3] | sl = *((r2 + r3));
0x000322a6 dmb ish | __asm ("dmb ish");
0x000322aa ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x000322ac dmb ish | __asm ("dmb ish");
0x000322b0 mov r7, r3 | r7 = r3;
| if (r3 == 0) {
0x000322b2 cbnz r3, 0x322ba |
0x000322b4 ldr.w r3, [r8, r0] | r3 = *((r8 + r0));
0x000322b8 ldr r7, [r3] | r7 = *(r3);
| }
0x000322ba mov r0, fp | r0 = fp;
0x000322bc adds r4, 1 | r4++;
0x000322be bl 0x33f80 | gst_caps_features_is_any ();
0x000322c2 str r0, [sp, 4] | var_4h = r0;
0x000322c4 mov r0, r7 | r0 = r7;
0x000322c6 bl 0x33f80 | gst_caps_features_is_any ();
0x000322ca ldr r3, [sp, 4] | r3 = var_4h;
0x000322cc mov r1, r7 | r1 = r7;
0x000322ce cmp r3, r0 |
0x000322d0 mov r0, fp | r0 = fp;
0x000322d2 beq 0x3225c |
| } while (r3 == r0);
| label_5:
0x000322d4 movs r0, 0 | r0 = 0;
0x000322d6 add sp, 0xc |
0x000322d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000322dc subs r0, r4, 0 | r0 = r4 - 0;
0x000322de it ne |
| if (r0 == r4) {
0x000322e0 movne r0, 1 | r0 = 1;
| }
0x000322e2 b 0x3220a | goto label_0;
| label_3:
0x000322e4 movs r0, 1 | r0 = 1;
0x000322e6 b 0x3220a | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31de8 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_subset () | void gst_caps_is_subset (uint32_t arg1, uint32_t arg2) {
| uint32_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00031de8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00031dec sub sp, 0xc |
0x00031dee ldr.w r8, [pc, 0x120] |
0x00031df2 str r0, [sp, 4] | var_4h = r0;
0x00031df4 add r8, pc | r8 = 0x63d0a;
0x00031df6 cmp r0, 0 |
| if (r0 == 0) {
0x00031df8 beq 0x31ec8 | goto label_2;
| }
0x00031dfa mov r6, r1 | r6 = r1;
0x00031dfc cmp r1, 0 |
| if (r1 == 0) {
0x00031dfe beq 0x31ee6 | goto label_3;
| }
0x00031e00 ldr r2, [sp, 4] | r2 = var_4h;
0x00031e02 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00031e04 lsls r0, r3, 0x1b | r0 = r3 << 0x1b;
| if (r0 < r3) {
0x00031e06 bmi 0x31eb4 | goto label_4;
| }
0x00031e08 ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x00031e0a cmp r2, 0 |
| if (r2 == 0) {
0x00031e0c beq 0x31ec0 | goto label_5;
| }
0x00031e0e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00031e10 cmp r3, 0 |
| if (r3 == 0) {
0x00031e12 beq 0x31ec0 | goto label_5;
| }
0x00031e14 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x00031e16 lsls r1, r1, 0x1b | r1 <<= 0x1b;
| if (r1 < r1) {
0x00031e18 bmi 0x31ec0 | goto label_5;
| }
0x00031e1a ldr r1, [r6, 0x24] | r1 = *((r6 + 0x24));
0x00031e1c cmp r1, 0 |
| if (r1 == 0) {
0x00031e1e beq 0x31f08 | goto label_6;
| }
0x00031e20 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00031e22 cmp r1, 0 |
| if (r1 == 0) {
0x00031e24 beq 0x31f08 | goto label_6;
| }
0x00031e26 subs.w sl, r3, 1 | sl = r3 - 1;
| if (sl < r3) {
0x00031e2a bmi 0x31ec0 | goto label_5;
| }
| label_1:
0x00031e2c ldr r3, [r2] | r3 = *(r2);
0x00031e2e ldr.w fp, [r3, sl, lsl 3] | offset_0 = sl << 3;
| fp = *((r3 + offset_0));
0x00031e32 dmb ish | __asm ("dmb ish");
0x00031e36 add.w r3, r3, sl, lsl 3 | r3 += (sl << 3);
0x00031e3a ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x00031e3c dmb ish | __asm ("dmb ish");
| if (r5 == 0) {
0x00031e40 cbnz r5, 0x31e4a |
0x00031e42 ldr r3, [pc, 0xd0] | r3 = *(0x31f16);
0x00031e44 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00031e48 ldr r5, [r3] | r5 = *(0x31f16);
| }
0x00031e4a ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00031e4c ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00031e4e subs r4, 1 | r4--;
| if (r4 >= 1) {
0x00031e50 bpl 0x31e5a | goto label_7;
| }
0x00031e52 b 0x31f04 | goto label_8;
| do {
| label_0:
0x00031e54 subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00031e56 blo 0x31f08 | goto label_6;
| }
0x00031e58 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
| label_7:
0x00031e5a ldr r3, [r3] | r3 = *(r3);
0x00031e5c ldr r2, [pc, 0xb4] | r2 = *(0x31f14);
0x00031e5e ldr.w r7, [r3, r4, lsl 3] | offset_1 = r4 << 3;
| r7 = *((r3 + offset_1));
0x00031e62 dmb ish | __asm ("dmb ish");
0x00031e66 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00031e6a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00031e6c dmb ish | __asm ("dmb ish");
0x00031e70 mov sb, r3 | sb = r3;
| if (r3 == 0) {
0x00031e72 cbnz r3, 0x31e7c |
0x00031e74 ldr.w r3, [r8, r2] | r3 = *((r8 + r2));
0x00031e78 ldr.w sb, [r3] | sb = *(r3);
| }
0x00031e7c mov r0, r5 | r0 = r5;
0x00031e7e bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x00031e82 mov r3, r0 | r3 = r0;
0x00031e84 mov r0, sb | r0 = sb;
| if (r3 == 0) {
0x00031e86 cbz r3, 0x31e90 | goto label_9;
| }
0x00031e88 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x00031e8c cmp r0, 0 |
0x00031e8e beq 0x31e54 |
| } while (r0 == 0);
| label_9:
0x00031e90 mov r0, r5 | r0 = r5;
0x00031e92 mov r1, sb | r1 = sb;
0x00031e94 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00031e98 cmp r0, 0 |
| if (r0 == 0) {
0x00031e9a beq 0x31e54 | goto label_0;
| }
0x00031e9c mov r1, r7 | r1 = r7;
0x00031e9e mov r0, fp | r0 = fp;
0x00031ea0 bl 0x61dd4 | r0 = gst_structure_is_subset ();
0x00031ea4 cmp r0, 0 |
| if (r0 == 0) {
0x00031ea6 beq 0x31e54 | goto label_0;
| }
| do {
0x00031ea8 subs.w sl, sl, 1 | sl--;
| if (sl > sl) {
0x00031eac blo 0x31ec0 |
0x00031eae ldr r3, [sp, 4] | r3 = var_4h;
0x00031eb0 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00031eb2 b 0x31e2c | goto label_1;
| label_4:
0x00031eb4 ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x00031eb6 ubfx r0, r0, 4, 1 | r0 = (r0 >> 4) & ((1 << 1) - 1);
0x00031eba add sp, 0xc |
0x00031ebc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
| label_5:
0x00031ec0 movs r0, 1 | r0 = 1;
0x00031ec2 add sp, 0xc |
0x00031ec4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00031ec8 ldr r1, [pc, 0x4c] |
0x00031eca ldr r3, [pc, 0x50] | r3 = *(0x31f1e);
0x00031ecc ldr r2, [pc, 0x50] |
0x00031ece add r1, pc |
0x00031ed0 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00031ed4 add.w r1, r1, 0x1f8 | r1 = 0x63fe2;
0x00031ed6 strb r4, [r7, 7] | *((r7 + 7)) = r4;
0x00031ed8 add r2, pc | r2 = 0x63dfc;
0x00031eda blx 0x1fdd0 | fcn_0001fdd0 ();
0x00031ede ldr r0, [sp, 4] | r0 = var_4h;
0x00031ee0 add sp, 0xc |
0x00031ee2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00031ee6 ldr r1, [pc, 0x3c] |
0x00031ee8 ldr r3, [pc, 0x30] | r3 = *(0x31f1c);
0x00031eea ldr r2, [pc, 0x3c] |
0x00031eec add r1, pc |
0x00031eee ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00031ef2 add.w r1, r1, 0x1f8 | r1 = 0x6400e;
0x00031ef6 add r2, pc | r2 = 0x63e24;
0x00031ef8 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00031efc mov r0, r6 | r0 = r6;
0x00031efe add sp, 0xc |
0x00031f00 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00031f04 adds r4, 1 | r4++;
0x00031f06 bne 0x31ea8 |
| } while (r4 != 1);
| label_6:
0x00031f08 movs r0, 0 | r0 = 0;
0x00031f0a add sp, 0xc |
0x00031f0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31fa4 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_subset_structure () | void gst_caps_is_subset_structure (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00031fa4 ldr r3, [pc, 0x70] |
0x00031fa6 push {r4, r5, r6, lr} |
0x00031fa8 mov r5, r0 | r5 = r0;
0x00031faa add r3, pc | r3 = 0x63fc6;
| if (r0 == 0) {
0x00031fac cbz r0, 0x31fe6 | goto label_0;
| }
0x00031fae mov r6, r1 | r6 = r1;
| if (r1 == 0) {
0x00031fb0 cbz r1, 0x31ffe | goto label_1;
| }
0x00031fb2 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00031fb4 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 < r3) {
0x00031fb6 bmi 0x31fde | goto label_2;
| }
0x00031fb8 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
| if (r3 == 0) {
0x00031fba cbz r3, 0x31fe2 | goto label_3;
| }
0x00031fbc ldr r4, [r3, 4] | r4 = *((r3 + 4));
| if (r4 == 0) {
0x00031fbe cbz r4, 0x31fe2 | goto label_3;
| }
0x00031fc0 subs r4, 1 | r4--;
| if (r4 >= 1) {
0x00031fc2 bpl 0x31fcc | goto label_4;
| }
0x00031fc4 b 0x31fe2 | goto label_3;
| do {
0x00031fc6 adds r3, r4, 1 | r3 = r4 + 1;
| if (r3 == r4) {
0x00031fc8 beq 0x31fe2 | goto label_3;
| }
0x00031fca ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| label_4:
0x00031fcc ldr r3, [r3] | r3 = *(r3);
0x00031fce mov r0, r6 | r0 = r6;
0x00031fd0 ldr.w r1, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| r1 = *((r3 + offset_0));
0x00031fd4 subs r4, 1 | r4--;
0x00031fd6 bl 0x61dd4 | r0 = gst_structure_is_subset ();
0x00031fda cmp r0, 0 |
0x00031fdc beq 0x31fc6 |
| } while (r0 == 0);
| label_2:
0x00031fde movs r0, 1 | r0 = 1;
0x00031fe0 pop {r4, r5, r6, pc} |
| label_3:
0x00031fe2 movs r0, 0 | r0 = 0;
0x00031fe4 pop {r4, r5, r6, pc} |
| label_0:
0x00031fe6 ldr r1, [pc, 0x34] |
0x00031fe8 ldr r0, [pc, 0x34] | r0 = *(0x32020);
0x00031fea ldr r2, [pc, 0x38] |
0x00031fec add r1, pc |
0x00031fee ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x00031ff0 add.w r1, r1, 0x22c | r1 = 0x6423a;
0x00031ff4 add r2, pc | r2 = 0x6401e;
0x00031ff6 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00031ffa mov r0, r5 | r0 = r5;
0x00031ffc pop {r4, r5, r6, pc} |
| label_1:
0x00031ffe ldr r1, [pc, 0x28] |
0x00032000 ldr r0, [pc, 0x1c] | r0 = *(0x32020);
0x00032002 ldr r2, [pc, 0x28] |
0x00032004 add r1, pc |
0x00032006 ldr r0, [r3, r0] | r0 = *((r3 + r0));
0x00032008 add.w r1, r1, 0x22c | r1 = 0x6425e;
0x0003200a strb r3, [r1, 4] | *((r1 + 4)) = r3;
0x0003200c add r2, pc | r2 = 0x6403e;
0x0003200e blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032012 mov r0, r6 | r0 = r6;
0x00032014 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32030 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_subset_structure_full () | void gst_caps_is_subset_structure_full (uint32_t arg1, uint32_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00032030 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00032034 mov r5, r0 | r5 = r0;
0x00032036 ldr.w r8, [pc, 0xcc] |
0x0003203a add r8, pc | r8 = gst_tag_list_is_empty;
0x0003203c cmp r0, 0 |
| if (r0 == 0) {
0x0003203e beq 0x320c2 | goto label_2;
| }
0x00032040 mov r7, r1 | r7 = r1;
0x00032042 cmp r1, 0 |
| if (r1 == 0) {
0x00032044 beq 0x320de | goto label_3;
| }
0x00032046 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00032048 lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0003204a bmi 0x320b6 | goto label_4;
| }
0x0003204c ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0003204e cmp r3, 0 |
| if (r3 == 0) {
0x00032050 beq 0x320bc | goto label_5;
| }
0x00032052 ldr r4, [r3, 4] | r4 = *((r3 + 4));
| if (r4 == 0) {
0x00032054 cbz r4, 0x320bc | goto label_5;
| }
0x00032056 mov r6, r2 | r6 = r2;
0x00032058 cmp r2, 0 |
| if (r2 == 0) {
0x0003205a beq 0x320fa | goto label_6;
| }
| label_1:
0x0003205c subs r4, 1 | r4--;
| if (r4 >= 1) {
0x0003205e bpl 0x32068 | goto label_7;
| }
0x00032060 b 0x320bc | goto label_5;
| do {
| label_0:
0x00032062 subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00032064 blo 0x320bc | goto label_5;
| }
0x00032066 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| label_7:
0x00032068 ldr r3, [r3] | r3 = *(r3);
0x0003206a ldr r2, [pc, 0x9c] | r2 = *(0x3210a);
0x0003206c ldr.w sb, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| sb = *((r3 + offset_0));
0x0003206e str r0, [sp, 0xd0] | *((sp + 0xd0)) = r0;
0x00032070 dmb ish | __asm ("dmb ish");
0x00032074 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00032078 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0003207a dmb ish | __asm ("dmb ish");
0x0003207e mov sl, r3 | sl = r3;
| if (r3 == 0) {
0x00032080 cbnz r3, 0x3208a |
0x00032082 ldr.w r3, [r8, r2] | r3 = *((r8 + r2));
0x00032086 ldr.w sl, [r3] | sl = *(r3);
| }
0x0003208a mov r0, r6 | r0 = r6;
0x0003208c bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x00032090 mov r3, r0 | r3 = r0;
0x00032092 mov r0, sl | r0 = sl;
| if (r3 == 0) {
0x00032094 cbz r3, 0x3209e | goto label_8;
| }
0x00032096 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x0003209a cmp r0, 0 |
0x0003209c beq 0x32062 |
| } while (r0 == 0);
| label_8:
0x0003209e mov r0, r6 | r0 = r6;
0x000320a0 mov r1, sl | r1 = sl;
0x000320a2 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x000320a6 cmp r0, 0 |
| if (r0 == 0) {
0x000320a8 beq 0x32062 | goto label_0;
| }
0x000320aa mov r1, sb | r1 = sb;
0x000320ac mov r0, r7 | r0 = r7;
0x000320ae bl 0x61dd4 | r0 = gst_structure_is_subset ();
0x000320b2 cmp r0, 0 |
| if (r0 == 0) {
0x000320b4 beq 0x32062 | goto label_0;
| }
| label_4:
0x000320b6 movs r0, 1 | r0 = 1;
0x000320b8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x000320bc movs r0, 0 | r0 = 0;
0x000320be pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x000320c2 ldr r1, [pc, 0x48] |
0x000320c4 ldr r3, [pc, 0x48] | r3 = *(0x32110);
0x000320c6 ldr r2, [pc, 0x4c] |
0x000320c8 add r1, pc |
0x000320ca ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000320ce add.w r1, r1, 0x24c | r1 = 0x64426;
0x000320d2 add r2, pc | r2 = 0x641ec;
0x000320d4 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000320d8 mov r0, r5 | r0 = r5;
0x000320da pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x000320de ldr r1, [pc, 0x38] |
0x000320e0 ldr r3, [pc, 0x2c] | r3 = *(0x32110);
0x000320e2 ldr r2, [pc, 0x38] |
0x000320e4 add r1, pc |
0x000320e6 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000320ea add.w r1, r1, 0x24c | r1 = 0x6444e;
0x000320ee add r2, pc | r2 = 0x64210;
0x000320f0 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000320f4 mov r0, r7 | r0 = r7;
0x000320f6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x000320fa ldr r2, [pc, 0xc] | r2 = *(0x3210a);
0x000320fc ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00032100 ldr r6, [r2] | r6 = *(0x3210a);
0x00032102 b 0x3205c | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32030 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_is_subset_structure_full () | void gst_caps_is_subset_structure_full (uint32_t arg1, uint32_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00032030 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00032034 mov r5, r0 | r5 = r0;
0x00032036 ldr.w r8, [pc, 0xcc] |
0x0003203a add r8, pc | r8 = gst_tag_list_is_empty;
0x0003203c cmp r0, 0 |
| if (r0 == 0) {
0x0003203e beq 0x320c2 | goto label_2;
| }
0x00032040 mov r7, r1 | r7 = r1;
0x00032042 cmp r1, 0 |
| if (r1 == 0) {
0x00032044 beq 0x320de | goto label_3;
| }
0x00032046 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00032048 lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0003204a bmi 0x320b6 | goto label_4;
| }
0x0003204c ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0003204e cmp r3, 0 |
| if (r3 == 0) {
0x00032050 beq 0x320bc | goto label_5;
| }
0x00032052 ldr r4, [r3, 4] | r4 = *((r3 + 4));
| if (r4 == 0) {
0x00032054 cbz r4, 0x320bc | goto label_5;
| }
0x00032056 mov r6, r2 | r6 = r2;
0x00032058 cmp r2, 0 |
| if (r2 == 0) {
0x0003205a beq 0x320fa | goto label_6;
| }
| label_1:
0x0003205c subs r4, 1 | r4--;
| if (r4 >= 1) {
0x0003205e bpl 0x32068 | goto label_7;
| }
0x00032060 b 0x320bc | goto label_5;
| do {
| label_0:
0x00032062 subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00032064 blo 0x320bc | goto label_5;
| }
0x00032066 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| label_7:
0x00032068 ldr r3, [r3] | r3 = *(r3);
0x0003206a ldr r2, [pc, 0x9c] | r2 = *(0x3210a);
0x0003206c ldr.w sb, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| sb = *((r3 + offset_0));
0x0003206e str r0, [sp, 0xd0] | *((sp + 0xd0)) = r0;
0x00032070 dmb ish | __asm ("dmb ish");
0x00032074 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00032078 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0003207a dmb ish | __asm ("dmb ish");
0x0003207e mov sl, r3 | sl = r3;
| if (r3 == 0) {
0x00032080 cbnz r3, 0x3208a |
0x00032082 ldr.w r3, [r8, r2] | r3 = *((r8 + r2));
0x00032086 ldr.w sl, [r3] | sl = *(r3);
| }
0x0003208a mov r0, r6 | r0 = r6;
0x0003208c bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x00032090 mov r3, r0 | r3 = r0;
0x00032092 mov r0, sl | r0 = sl;
| if (r3 == 0) {
0x00032094 cbz r3, 0x3209e | goto label_8;
| }
0x00032096 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x0003209a cmp r0, 0 |
0x0003209c beq 0x32062 |
| } while (r0 == 0);
| label_8:
0x0003209e mov r0, r6 | r0 = r6;
0x000320a0 mov r1, sl | r1 = sl;
0x000320a2 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x000320a6 cmp r0, 0 |
| if (r0 == 0) {
0x000320a8 beq 0x32062 | goto label_0;
| }
0x000320aa mov r1, sb | r1 = sb;
0x000320ac mov r0, r7 | r0 = r7;
0x000320ae bl 0x61dd4 | r0 = gst_structure_is_subset ();
0x000320b2 cmp r0, 0 |
| if (r0 == 0) {
0x000320b4 beq 0x32062 | goto label_0;
| }
| label_4:
0x000320b6 movs r0, 1 | r0 = 1;
0x000320b8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x000320bc movs r0, 0 | r0 = 0;
0x000320be pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x000320c2 ldr r1, [pc, 0x48] |
0x000320c4 ldr r3, [pc, 0x48] | r3 = *(0x32110);
0x000320c6 ldr r2, [pc, 0x4c] |
0x000320c8 add r1, pc |
0x000320ca ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000320ce add.w r1, r1, 0x24c | r1 = 0x64426;
0x000320d2 add r2, pc | r2 = 0x641ec;
0x000320d4 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000320d8 mov r0, r5 | r0 = r5;
0x000320da pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x000320de ldr r1, [pc, 0x38] |
0x000320e0 ldr r3, [pc, 0x2c] | r3 = *(0x32110);
0x000320e2 ldr r2, [pc, 0x38] |
0x000320e4 add r1, pc |
0x000320e6 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000320ea add.w r1, r1, 0x24c | r1 = 0x6444e;
0x000320ee add r2, pc | r2 = 0x64210;
0x000320f0 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000320f4 mov r0, r7 | r0 = r7;
0x000320f6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x000320fa ldr r2, [pc, 0xc] | r2 = *(0x3210a);
0x000320fc ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x00032100 ldr r6, [r2] | r6 = *(0x3210a);
0x00032102 b 0x3205c | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32ba4 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_map_in_place () | void gst_caps_map_in_place (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00032ba4 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032ba8 ldr.w r8, [pc, 0xec] |
0x00032baa strh r4, [r5, 6] | *((r5 + 6)) = r4;
0x00032bac add r8, pc | r8 = 0x65848;
| if (r0 != 0) {
0x00032bae cbz r0, 0x32bc2 |
0x00032bb0 ldr r3, [pc, 0xe8] |
0x00032bb2 mov r7, r2 | r7 = r2;
0x00032bb4 ldr r2, [r0] | r2 = *(r0);
0x00032bb6 mov sl, r0 | sl = r0;
0x00032bb8 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00032bbc ldr r3, [r3] | r3 = *(0x32c9c);
0x00032bbe cmp r2, r3 |
| if (r2 == r3) {
0x00032bc0 beq 0x32be0 | goto label_1;
| }
| }
0x00032bc2 ldr r1, [pc, 0xdc] |
0x00032bc4 movs r5, 0 | r5 = 0;
0x00032bc6 ldr r3, [pc, 0xdc] | r3 = *(0x32ca6);
0x00032bc8 ldr r2, [pc, 0xdc] |
0x00032bca add r1, pc |
0x00032bcc ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00032bd0 add.w r1, r1, 0x324 | r1 = 0x65b94;
0x00032bd4 add r2, pc | r2 = 0x65880;
0x00032bd6 blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
0x00032bda mov r0, r5 | r0 = r5;
0x00032bdc pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x00032be0 mov r6, r1 | r6 = r1;
0x00032be2 bl 0x486d8 | r0 = gst_mini_object_is_writable ();
0x00032be6 mov r5, r0 | r5 = r0;
0x00032be8 cmp r0, 0 |
| if (r0 == 0) {
0x00032bea beq 0x32c54 | goto label_2;
| }
0x00032bec cmp r6, 0 |
| if (r6 == 0) {
0x00032bee beq 0x32c78 | goto label_3;
| }
0x00032bf0 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00032bf4 ldr.w sb, [r3, 4] | sb = *((r3 + 4));
0x00032bf8 cmp.w sb, 0 |
| if (sb == 0) {
0x00032bfc beq 0x32c70 | goto label_4;
| }
0x00032bfe movs r4, 0 | r4 = 0;
0x00032c00 b 0x32c1a | goto label_5;
| label_0:
0x00032c02 mov r0, r5 | r0 = r5;
0x00032c04 mov r2, r7 | r2 = r7;
0x00032c06 mov r1, fp | r1 = fp;
0x00032c08 adds r4, 1 | r4++;
0x00032c0a blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00032c0c mov r5, r0 | r5 = r0;
0x00032c0e cmp r0, 0 |
0x00032c10 beq 0x32bda |
| } while (r0 == 0);
0x00032c12 cmp sb, r4 |
| if (sb == r4) {
0x00032c14 beq 0x32c70 | goto label_4;
| }
0x00032c16 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| label_5:
0x00032c1a ldr r3, [r3] | r3 = *(r3);
0x00032c1c dmb ish | __asm ("dmb ish");
0x00032c20 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00032c24 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00032c26 dmb ish | __asm ("dmb ish");
0x00032c2a ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x00032c2e mov r5, r3 | r5 = r3;
0x00032c30 ldr r2, [r2] | r2 = *(r2);
0x00032c32 ldr.w fp, [r2, r4, lsl 3] | offset_0 = r4 << 3;
| fp = *((r2 + offset_0));
0x00032c34 add sp, 0xd0 |
0x00032c36 cmp r3, 0 |
| if (r3 != 0) {
0x00032c38 bne 0x32c02 | goto label_0;
| }
0x00032c3a ldr r3, [pc, 0x70] | r3 = *(0x32cae);
0x00032c3c ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00032c40 ldr r0, [r3] | r0 = *(0x32cae);
0x00032c42 bl 0x34224 | gst_caps_features_copy ();
0x00032c46 mov r1, r4 | r1 = r4;
0x00032c48 mov r5, r0 | r5 = r0;
0x00032c4a mov r2, r0 | r2 = r0;
0x00032c4c mov r0, sl | r0 = sl;
0x00032c4e bl 0x31668 | gst_caps_set_features ();
0x00032c52 b 0x32c02 | goto label_0;
| label_2:
0x00032c54 ldr r1, [pc, 0x58] |
0x00032c56 ldr r3, [pc, 0x4c] | r3 = *(0x32ca6);
0x00032c58 ldr r2, [pc, 0x58] |
0x00032c5a add r1, pc |
0x00032c5c ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00032c60 add.w r1, r1, 0x324 | r1 = 0x65c32;
0x00032c64 add r2, pc | r2 = 0x6591c;
0x00032c66 blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032c6a mov r0, r5 | r0 = r5;
0x00032c6c pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00032c70 movs r5, 1 | r5 = 1;
0x00032c72 mov r0, r5 | r0 = r5;
0x00032c74 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00032c78 ldr r1, [pc, 0x3c] |
0x00032c7a mov r5, r6 | r5 = r6;
0x00032c7c ldr r3, [pc, 0x24] | r3 = *(0x32ca4);
0x00032c7e ldr r2, [pc, 0x3c] |
0x00032c80 add r1, pc |
0x00032c82 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00032c86 add.w r1, r1, 0x324 | r1 = 0x65c60;
0x00032c8a add r2, pc | r2 = 0x6594c;
0x00032c8c blx 0x1fdd0 | fcn_0001fdd0 ();
0x00032c90 mov r0, r5 | r0 = r5;
0x00032c92 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31230 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_merge_structure () | void gst_caps_merge_structure (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00031230 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00031234 sub sp, 8 |
0x00031236 ldr r6, [pc, 0xd8] |
0x00031238 add r6, pc | r6 = 0x6254e;
| if (r0 != 0) {
0x0003123a cbz r0, 0x3124a |
0x0003123c ldr r3, [pc, 0xd4] |
0x0003123e mov r5, r0 | r5 = r0;
0x00031240 ldr r2, [r0] | r2 = *(r0);
0x00031242 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x00031244 ldr r3, [r3] | r3 = *(0x31314);
0x00031246 cmp r2, r3 |
| if (r2 == r3) {
0x00031248 beq 0x31266 | goto label_2;
| }
| }
0x0003124a ldr r1, [pc, 0xcc] |
0x0003124c movs r5, 0 | r5 = 0;
0x0003124e ldr r3, [pc, 0xcc] | r3 = *(0x3131e);
0x00031250 ldr r2, [pc, 0xcc] |
0x00031252 add r1, pc | r1 = 0x62570;
0x00031254 ldr r0, [r6, r3] | r0 = *((r6 + r3));
0x00031256 adds r1, 0x68 | r1 += 0x68;
0x00031258 add r2, pc | r2 = 0x6257c;
0x0003125a blx 0x1fdd0 | fcn_0001fdd0 ();
0x0003125c invalid |
| do {
| label_1:
0x0003125e mov r0, r5 | r0 = r5;
0x00031260 add sp, 8 |
0x00031262 pop.w {r4, r5, r6, r7, r8, pc} |
0x00031264 strh r0, [r6, 0xe] | *((r6 + 0xe)) = r0;
| label_2:
0x00031266 mov r8, r1 | r8 = r1;
0x00031268 cmp r1, 0 |
0x0003126a beq 0x3125e |
| } while (r1 == 0);
0x0003126c ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0003126e lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 < r3) {
0x00031270 bmi 0x312c4 | goto label_3;
| }
0x00031272 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x00031274 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00031276 subs r4, 1 | r4--;
| if (r4 < 1) {
0x00031278 bmi 0x312d2 | goto label_4;
| }
0x0003127a ldr r2, [pc, 0xa8] | r2 = *(0x31326);
0x0003127c ldr r7, [r6, r2] | r7 = *((r6 + r2));
0x0003127e b 0x31290 |
| while (r3 != 0) {
0x00031280 ldr r1, [r7] | r1 = *(r7);
0x00031282 subs r4, 1 | r4--;
0x00031284 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 != 0) {
0x00031288 cbnz r0, 0x312b8 | goto label_5;
| }
| label_0:
0x0003128a adds r3, r4, 1 | r3 = r4 + 1;
| if (r3 == r4) {
0x0003128c beq 0x312d2 | goto label_4;
| }
0x0003128e ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00031290 ldr r3, [r3] | r3 = *(r3);
0x00031292 ldr.w r6, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| r6 = *((r3 + offset_0));
0x00031296 dmb ish | __asm ("dmb ish");
0x0003129a add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x0003129e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000312a0 dmb ish | __asm ("dmb ish");
0x000312a4 mov r0, r3 | r0 = r3;
0x000312a6 cmp r3, 0 |
0x000312a8 bne 0x31280 |
| }
0x000312aa ldr r0, [r7] | r0 = *(r7);
0x000312ac subs r4, 1 | r4--;
0x000312ae mov r1, r0 | r1 = r0;
0x000312b0 bl 0x33e98 | gst_caps_features_is_equal ();
0x000312b2 ldc2l p8, c2, [r2, 0]! | __asm ("ldc2l p8, c2, [r2, 0]!");
| if (r4 == 1) {
0x000312b6 beq 0x3128a | goto label_0;
| }
| label_5:
0x000312b8 mov r1, r6 | r1 = r6;
0x000312ba mov r0, r8 | r0 = r8;
0x000312bc bl 0x61dd4 | r0 = gst_structure_is_subset ();
0x000312c0 cmp r0, 0 |
| if (r0 == 0) {
0x000312c2 beq 0x3128a | goto label_0;
| }
| label_3:
0x000312c4 mov r0, r8 | r0 = r8;
0x000312c6 bl 0x5e698 | gst_structure_free ();
0x000312ca mov r0, r5 | r0 = r5;
0x000312cc add sp, 8 |
0x000312ce pop.w {r4, r5, r6, r7, r8, pc} |
0x000312d0 strh r0, [r6, 0xe] | *((r6 + 0xe)) = r0;
| label_4:
0x000312d2 mov r0, r5 | r0 = r5;
0x000312d4 bl 0x489c8 | r0 = gst_mini_object_make_writable ();
0x000312d8 adds r4, r0, 4 | r4 = r0 + 4;
0x000312da mov r5, r0 | r5 = r0;
0x000312dc movs r3, 0 | r3 = 0;
0x000312de mov r1, r4 | r1 = r4;
0x000312e0 mov r0, r8 | r0 = r8;
0x000312e2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000312e6 str r3, [sp, 4] | var_4h = r3;
0x000312e8 bl 0x5eee8 | r0 = gst_structure_set_parent_refcount ();
0x000312ec cmp r0, 0 |
| if (r0 == 0) {
0x000312ee beq 0x3125e | goto label_1;
| }
0x000312f0 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 == 0) {
0x000312f2 cbz r0, 0x312fe | goto label_6;
| }
0x000312f4 mov r1, r4 | r1 = r4;
0x000312f6 bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
0x000312fa cmp r0, 0 |
| if (r0 == 0) {
0x000312fc beq 0x3125e | goto label_1;
| }
| label_6:
0x000312fe ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x00031300 movs r2, 1 | r2 = 1;
0x00031302 mov r1, sp | r1 = sp;
0x00031304 blx 0x208f8 | fcn_000208f8 ();
0x00031308 mov r0, r5 | r0 = r5;
0x0003130a add sp, 8 |
0x0003130c pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31328 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_merge_structure_full () | void gst_caps_merge_structure_full (int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00031328 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0003132c sub sp, 0xc |
0x0003132e ldr r7, [pc, 0x100] |
0x00031330 add r7, pc | r7 = 0x62766;
| if (r0 != 0) {
0x00031332 cbz r0, 0x31344 |
0x00031334 ldr r3, [pc, 0xfc] |
0x00031336 mov sb, r2 | sb = r2;
0x00031338 ldr r2, [r0] | r2 = *(r0);
0x0003133a mov r5, r0 | r5 = r0;
0x0003133c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0003133e ldr r3, [r3] | r3 = *(0x31434);
0x00031340 cmp r2, r3 |
| if (r2 == r3) {
0x00031342 beq 0x31360 | goto label_3;
| }
| }
0x00031344 ldr r1, [pc, 0xf0] |
0x00031346 movs r5, 0 | r5 = 0;
0x00031348 ldr r3, [pc, 0xf0] | r3 = *(0x3143c);
0x0003134a ldr r2, [pc, 0xf4] |
0x0003134c add r1, pc | r1 = gst_system_clock_get_type
0x0003134e ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00031350 adds r1, 0x84 | r1 += 0x84;
0x00031352 add r2, pc | r2 = 0x62798;
0x00031354 blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
| label_1:
0x00031358 mov r0, r5 | r0 = r5;
0x0003135a add sp, 0xc |
0x0003135c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00031360 mov r8, r1 | r8 = r1;
0x00031362 cmp r1, 0 |
0x00031364 beq 0x31358 |
| } while (r1 == 0);
0x00031366 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00031368 lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0003136a bmi 0x313d0 | goto label_4;
| }
0x0003136c mov r6, sb | r6 = sb;
0x0003136e cmp.w sb, 0 |
| if (sb == 0) {
0x00031372 beq 0x31428 | goto label_5;
| }
| label_2:
0x00031374 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00031376 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00031378 subs r4, 1 | r4--;
| if (r4 >= 1) {
0x0003137a bpl 0x31384 | goto label_6;
| }
0x0003137c b 0x313ea | goto label_7;
| do {
| label_0:
0x0003137e subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00031380 blo 0x313ea | goto label_7;
| }
0x00031382 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| label_6:
0x00031384 ldr r3, [r3] | r3 = *(r3);
0x00031386 ldr r2, [pc, 0xbc] | r2 = *(0x31446);
0x00031388 ldr.w sl, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| sl = *((r3 + offset_0));
0x0003138c dmb ish | __asm ("dmb ish");
0x00031390 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00031394 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00031396 dmb ish | __asm ("dmb ish");
0x0003139a mov fp, r3 |
| if (r3 == 0) {
0x0003139c cbnz r3, 0x313a4 |
0x0003139e ldr r3, [r7, r2] | r3 = *((r7 + r2));
0x000313a0 ldr.w fp, [r3] | fp = *(r3);
| }
0x000313a4 mov r0, r6 | r0 = r6;
0x000313a6 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x000313aa mov r3, r0 | r3 = r0;
0x000313ac mov r0, fp | r0 = fp;
| if (r3 == 0) {
0x000313ae cbz r3, 0x313b8 | goto label_8;
| }
0x000313b0 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x000313b4 cmp r0, 0 |
0x000313b6 beq 0x3137e |
| } while (r0 == 0);
| label_8:
0x000313b8 mov r0, r6 | r0 = r6;
0x000313ba mov r1, fp | r1 = fp;
0x000313bc bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x000313c0 cmp r0, 0 |
| if (r0 == 0) {
0x000313c2 beq 0x3137e | goto label_0;
| }
0x000313c4 mov r1, sl | r1 = sl;
0x000313c6 mov r0, r8 | r0 = r8;
0x000313c8 bl 0x61dd4 | gst_structure_is_subset ();
0x000313ca stc2 p8, c2, [r4, -0] | __asm ("stc2 p8, c2, [r4, -0]");
| if (r0 == 0) {
0x000313ce beq 0x3137e | goto label_0;
| }
| label_4:
0x000313d0 mov r0, r8 | r0 = r8;
0x000313d2 bl 0x5e698 | gst_structure_free ();
0x000313d4 vld4.32 {d31, d1, d3, d5}, [r1:0x100], sb | __asm ("vld4.32 {d31, d1, d3, d5}, [r1:0x100], sb");
0x000313d8 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x000313da beq 0x31358 | goto label_1;
| }
0x000313dc mov r0, sb | r0 = sb;
0x000313de bl 0x339b8 | gst_caps_features_free ();
0x000313e2 mov r0, r5 | r0 = r5;
0x000313e4 add sp, 0xc |
0x000313e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000313ea mov r0, r5 | r0 = r5;
0x000313ec bl 0x489c8 | r0 = gst_mini_object_make_writable ();
0x000313f0 mov r5, r0 | r5 = r0;
0x000313f2 mov r0, r8 | r0 = r8;
0x000313f4 adds r4, r5, 4 | r4 = r5 + 4;
0x000313f6 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000313fa mov r1, r4 | r1 = r4;
0x000313fc str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x00031400 bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x00031402 ldc2l p8, c2, [r2, -0]! | __asm ("ldc2l p8, c2, [r2, -0]!");
| if (r4 == r5) {
0x00031406 beq 0x31358 | goto label_1;
| }
0x00031408 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 == 0) {
0x0003140a cbz r0, 0x31416 | goto label_9;
| }
0x0003140c mov r1, r4 | r1 = r4;
0x0003140e bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
0x00031412 cmp r0, 0 |
| if (r0 == 0) {
0x00031414 beq 0x31358 | goto label_1;
| }
| label_9:
0x00031416 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x00031418 movs r2, 1 | r2 = 1;
0x0003141a mov r1, sp | r1 = sp;
0x0003141c blx 0x208f8 | fcn_000208f8 ();
0x0003141e orn r6, ip, r8, asr 16 | r6 = ip | r8;
| r6 = ~r6;
0x00031420 mov r0, r5 | r0 = r5;
0x00031422 add sp, 0xc |
0x00031424 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00031428 ldr r3, [pc, 0x18] | r3 = *(0x31444);
0x0003142a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0003142c ldr r6, [r3] | r6 = *(0x31444);
0x0003142e b 0x31374 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x31328 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_merge_structure_full () | void gst_caps_merge_structure_full (int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00031328 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003132c sub sp, 0xc |
0x0003132e ldr r7, [pc, 0x100] |
0x00031330 add r7, pc | r7 = 0x62766;
| if (r0 != 0) {
0x00031332 cbz r0, 0x31344 |
0x00031334 ldr r3, [pc, 0xfc] |
0x00031336 mov sb, r2 | sb = r2;
0x00031338 ldr r2, [r0] | r2 = *(r0);
0x0003133a mov r5, r0 | r5 = r0;
0x0003133c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0003133e ldr r3, [r3] | r3 = *(0x31434);
0x00031340 cmp r2, r3 |
| if (r2 == r3) {
0x00031342 beq 0x31360 | goto label_3;
| }
| }
0x00031344 ldr r1, [pc, 0xf0] |
0x00031346 movs r5, 0 | r5 = 0;
0x00031348 ldr r3, [pc, 0xf0] | r3 = *(0x3143c);
0x0003134a ldr r2, [pc, 0xf4] |
0x0003134c add r1, pc | r1 = gst_system_clock_get_type
0x0003134e ldr r0, [r7, r3] | r0 = *((r7 + r3));
0x00031350 adds r1, 0x84 | r1 += 0x84;
0x00031352 add r2, pc | r2 = 0x62798;
0x00031354 blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
| label_1:
0x00031358 mov r0, r5 | r0 = r5;
0x0003135a add sp, 0xc |
0x0003135c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00031360 mov r8, r1 | r8 = r1;
0x00031362 cmp r1, 0 |
0x00031364 beq 0x31358 |
| } while (r1 == 0);
0x00031366 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00031368 lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0003136a bmi 0x313d0 | goto label_4;
| }
0x0003136c mov r6, sb | r6 = sb;
0x0003136e cmp.w sb, 0 |
| if (sb == 0) {
0x00031372 beq 0x31428 | goto label_5;
| }
| label_2:
0x00031374 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00031376 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00031378 subs r4, 1 | r4--;
| if (r4 >= 1) {
0x0003137a bpl 0x31384 | goto label_6;
| }
0x0003137c b 0x313ea | goto label_7;
| do {
| label_0:
0x0003137e subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00031380 blo 0x313ea | goto label_7;
| }
0x00031382 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| label_6:
0x00031384 ldr r3, [r3] | r3 = *(r3);
0x00031386 ldr r2, [pc, 0xbc] | r2 = *(0x31446);
0x00031388 ldr.w sl, [r3, r4, lsl 3] | offset_0 = r4 << 3;
| sl = *((r3 + offset_0));
0x0003138c dmb ish | __asm ("dmb ish");
0x00031390 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00031394 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00031396 dmb ish | __asm ("dmb ish");
0x0003139a mov fp, r3 |
| if (r3 == 0) {
0x0003139c cbnz r3, 0x313a4 |
0x0003139e ldr r3, [r7, r2] | r3 = *((r7 + r2));
0x000313a0 ldr.w fp, [r3] | fp = *(r3);
| }
0x000313a4 mov r0, r6 | r0 = r6;
0x000313a6 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x000313aa mov r3, r0 | r3 = r0;
0x000313ac mov r0, fp | r0 = fp;
| if (r3 == 0) {
0x000313ae cbz r3, 0x313b8 | goto label_8;
| }
0x000313b0 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x000313b4 cmp r0, 0 |
0x000313b6 beq 0x3137e |
| } while (r0 == 0);
| label_8:
0x000313b8 mov r0, r6 | r0 = r6;
0x000313ba mov r1, fp | r1 = fp;
0x000313bc bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x000313c0 cmp r0, 0 |
| if (r0 == 0) {
0x000313c2 beq 0x3137e | goto label_0;
| }
0x000313c4 mov r1, sl | r1 = sl;
0x000313c6 mov r0, r8 | r0 = r8;
0x000313c8 bl 0x61dd4 | gst_structure_is_subset ();
0x000313ca stc2 p8, c2, [r4, -0] | __asm ("stc2 p8, c2, [r4, -0]");
| if (r0 == 0) {
0x000313ce beq 0x3137e | goto label_0;
| }
| label_4:
0x000313d0 mov r0, r8 | r0 = r8;
0x000313d2 bl 0x5e698 | gst_structure_free ();
0x000313d4 vld4.32 {d31, d1, d3, d5}, [r1:0x100], sb | __asm ("vld4.32 {d31, d1, d3, d5}, [r1:0x100], sb");
0x000313d8 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x000313da beq 0x31358 | goto label_1;
| }
0x000313dc mov r0, sb | r0 = sb;
0x000313de bl 0x339b8 | gst_caps_features_free ();
0x000313e2 mov r0, r5 | r0 = r5;
0x000313e4 add sp, 0xc |
0x000313e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x000313ea mov r0, r5 | r0 = r5;
0x000313ec bl 0x489c8 | r0 = gst_mini_object_make_writable ();
0x000313f0 mov r5, r0 | r5 = r0;
0x000313f2 mov r0, r8 | r0 = r8;
0x000313f4 adds r4, r5, 4 | r4 = r5 + 4;
0x000313f6 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000313fa mov r1, r4 | r1 = r4;
0x000313fc str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x00031400 bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x00031402 ldc2l p8, c2, [r2, -0]! | __asm ("ldc2l p8, c2, [r2, -0]!");
| if (r4 == r5) {
0x00031406 beq 0x31358 | goto label_1;
| }
0x00031408 ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 == 0) {
0x0003140a cbz r0, 0x31416 | goto label_9;
| }
0x0003140c mov r1, r4 | r1 = r4;
0x0003140e bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
0x00031412 cmp r0, 0 |
| if (r0 == 0) {
0x00031414 beq 0x31358 | goto label_1;
| }
| label_9:
0x00031416 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x00031418 movs r2, 1 | r2 = 1;
0x0003141a mov r1, sp | r1 = sp;
0x0003141c blx 0x208f8 | fcn_000208f8 ();
0x0003141e orn r6, ip, r8, asr 16 | r6 = ip | r8;
| r6 = ~r6;
0x00031420 mov r0, r5 | r0 = r5;
0x00031422 add sp, 0xc |
0x00031424 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00031428 ldr r3, [pc, 0x18] | r3 = *(0x31444);
0x0003142a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0003142c ldr r6, [r3] | r6 = *(0x31444);
0x0003142e b 0x31374 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x3253c */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_simplify () | void gst_caps_simplify (int16_t arg1, int16_t arg2) {
| int16_t var_0h_3;
| int16_t var_4h_3;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_28h;
| int16_t var_40h;
| r0 = arg1;
| r1 = arg2;
0x0003253c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00032540 sub sp, 0x4c |
0x00032542 ldr.w sl, [pc, 0x234] |
0x00032544 adr r2, 0xd0 | r2 = 0xd0;
0x00032546 add sl, pc | sl = 0x64cc4;
| if (r0 != 0) {
0x00032548 cbz r0, 0x3255a |
0x0003254a ldr r3, [pc, 0x230] |
0x0003254c mov r7, r0 | r7 = r0;
0x0003254e ldr r2, [r0] | r2 = *(r0);
0x00032550 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00032554 ldr r3, [r3] | r3 = *(0x3277e);
0x00032556 cmp r2, r3 |
| if (r2 == r3) {
0x00032558 beq 0x3257a | goto label_8;
| }
| }
0x0003255a ldr r1, [pc, 0x224] |
0x0003255c movs r7, 0 | r7 = 0;
0x0003255e ldr r3, [pc, 0x224] | r3 = *(0x32786);
0x00032560 ldr r2, [pc, 0x224] |
0x00032562 add r1, pc |
0x00032564 ldr.w r0, [sl, r3] | r0 = *((sl + r3));
0x00032568 add.w r1, r1, 0x2cc | r1 = 0x64fb4;
0x0003256c add r2, pc | r2 = 0x64cf8;
0x0003256e blx 0x1fdd0 | fcn_0001fdd0 ();
| do {
| label_0:
0x00032572 mov r0, r7 | r0 = r7;
0x00032574 add sp, 0x4c |
0x00032576 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0003257a ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0003257c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0003257e cmp r3, 0 |
0x00032580 beq 0x32572 |
| } while (r3 == 0);
0x00032582 subs r4, r3, 1 | r4 = r3 - 1;
0x00032584 str r4, [sp, 0x10] | var_10h = r4;
| if (r4 == r3) {
0x00032586 beq 0x32572 | goto label_0;
| }
0x00032588 bl 0x489c8 | gst_mini_object_make_writable ();
0x0003258c ldr r1, [pc, 0x1fc] |
0x0003258e mov r7, r0 | r7 = r0;
0x00032590 ldr r0, [r0, 0x24] | r0 = *((r0 + 0x24));
0x00032592 add r1, pc | r1 = 0x64d22;
0x00032594 blx 0x1f198 | fcn_0001f198 ();
0x00032598 cmp r4, 0 |
| if (r4 < 0) {
0x0003259a blt 0x32572 | goto label_0;
| }
0x0003259c ldr r3, [pc, 0x1f0] |
0x0003259e mov fp, r4 |
0x000325a0 add.w r8, sp, 0x20 | r8 += var_20h;
0x000325a4 add r3, pc | r3 = 0x64d38;
0x000325a6 str r3, [sp, 8] | var_8h_2 = r3;
| label_3:
0x000325a8 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000325aa lsl.w r2, fp, 3 | r2 = fp << 3;
0x000325ae str r2, [sp, 0xc] | var_ch = r2;
0x000325b0 ldr r3, [r3] | r3 = *(r3);
0x000325b2 adds r2, r3, r2 | r2 = r3 + r2;
0x000325b4 ldr.w r5, [r3, fp, lsl 3] | offset_0 = fp << 3;
| r5 = *((r3 + offset_0));
0x000325b8 dmb ish | __asm ("dmb ish");
0x000325bc ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000325be dmb ish | __asm ("dmb ish");
| if (r3 == 0) {
0x000325c2 cbnz r3, 0x325cc |
0x000325c4 ldr r3, [pc, 0x1cc] |
0x000325c6 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000325ca ldr r3, [r3] | r3 = *(0x32794);
| }
0x000325cc str r3, [sp, 4] | var_4h_3 = r3;
0x000325ce ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000325d0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000325d2 ldr r3, [r3] | r3 = *(r3);
0x000325d4 ldr.w r6, [r3, r2, lsl 3] | offset_1 = r2 << 3;
| r6 = *((r3 + offset_1));
0x000325d8 dmb ish | __asm ("dmb ish");
0x000325dc add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x000325e0 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x000325e2 dmb ish | __asm ("dmb ish");
| if (r4 == 0) {
0x000325e6 cbnz r4, 0x325f0 |
0x000325e8 ldr r3, [pc, 0x1a8] | r3 = *(0x32794);
0x000325ea ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x000325ee ldr r4, [r3] | r4 = *(0x32794);
| }
0x000325f0 mov r0, r5 | r0 = r5;
0x000325f2 bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x000325f6 mov r3, r0 | r3 = r0;
0x000325f8 mov r0, r6 | r0 = r6;
0x000325fa mov r6, r3 | r6 = r3;
0x000325fc bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x00032600 cmp r6, r0 |
| if (r6 == r0) {
0x00032602 beq.w 0x32760 | goto label_9;
| }
| label_5:
0x00032606 str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
| label_6:
0x0003260a ldr r4, [sp, 0x10] | r4 = var_10h;
0x0003260c b 0x32612 |
| while (fp == r4) {
| label_1:
0x0003260e subs r4, 1 | r4--;
| if (r4 <= 1) {
0x00032610 blo 0x326cc | goto label_7;
| }
| label_2:
0x00032612 cmp fp, r4 |
0x00032614 beq 0x3260e |
| }
0x00032616 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00032618 ldr r3, [r3] | r3 = *(r3);
0x0003261a ldr.w r6, [r3, r4, lsl 3] | offset_2 = r4 << 3;
| r6 = *((r3 + offset_2));
0x0003261e dmb ish | __asm ("dmb ish");
0x00032622 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x00032626 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00032628 dmb ish | __asm ("dmb ish");
| if (r1 == 0) {
0x0003262c cbnz r1, 0x32636 |
0x0003262e ldr r3, [pc, 0x164] | r3 = *(0x32796);
0x00032630 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00032634 ldr r1, [r3] | r1 = *(0x32796);
| }
0x00032636 mov r0, r5 | r0 = r5;
0x00032638 str r1, [sp] | *(sp) = r1;
0x0003263a bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x0003263e mov sb, r0 | sb = r0;
0x00032640 mov r0, r6 | r0 = r6;
0x00032642 bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x00032646 cmp sb, r0 |
| if (sb != r0) {
0x00032648 bne 0x326cc | goto label_7;
| }
0x0003264a ldrd r1, r0, [sp] | __asm ("ldrd r1, r0, [sp]");
0x0003264e bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00032652 cmp r0, 0 |
| if (r0 == 0) {
0x00032654 beq 0x326cc | goto label_7;
| }
0x00032656 movs r2, 0x28 | r2 = 0x28;
0x00032658 movs r1, 0 | r1 = 0;
0x0003265a mov r0, r8 | r0 = r8;
0x0003265c blx 0x1f724 | fsync ();
0x00032660 mov r2, r6 | r2 = r6;
0x00032662 mov r1, r5 | r1 = r5;
0x00032664 add r0, sp, 0x1c | r0 += var_1ch;
0x00032666 bl 0x30b38 | r0 = fcn_00030b38 (r0, r1, r2);
| if (r0 != 0) {
0x0003266a cbz r0, 0x32690 |
0x0003266c ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0003266e cmp r0, 0 |
| if (r0 == 0) {
0x00032670 beq 0x32748 | goto label_10;
| }
0x00032672 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x00032674 cmp r1, 0 |
| if (r1 == 0) {
0x00032676 beq 0x326dc | goto label_11;
| }
0x00032678 ldr r3, [pc, 0x11c] | r3 = *(0x32798);
0x0003267a movs r2, 0 | r2 = 0;
0x0003267c ldr.w r1, [sl, r3] | r1 = *((sl + r3));
0x00032680 str r0, [sp] | *(sp) = r0;
0x00032682 blx 0x200b4 | g_initially_unowned_get_type ();
0x00032686 ldr r0, [sp] | r0 = *(sp);
0x00032688 blx 0x1f330 | fcn_0001f330 ();
0x0003268c movs r3, 0 | r3 = 0;
0x0003268e str r3, [sp, 0x1c] | var_1ch = r3;
| }
0x00032690 ldr r1, [sp, 8] | r1 = var_8h_2;
0x00032692 mov r2, r8 | r2 = r8;
0x00032694 mov r0, r5 | r0 = r5;
0x00032696 str r6, [sp, 0x40] | var_40h = r6;
0x00032698 bl 0x5fda8 | r0 = gst_structure_foreach ();
0x0003269c cmp r0, 0 |
| if (r0 == 0) {
0x0003269e beq 0x3260e | goto label_1;
| }
0x000326a0 add r2, sp, 0x28 | r2 += var_28h;
0x000326a2 mov r0, r2 | r0 = r2;
0x000326a4 str r2, [sp] | *(sp) = r2;
0x000326a6 blx 0x207f0 | r0 = fcn_000207f0 ();
| if (r0 == 0) {
0x000326aa cbz r0, 0x32708 | goto label_12;
| }
0x000326ac mov r0, r5 | r0 = r5;
0x000326ae bl 0x5fd0c | gst_structure_n_fields ();
0x000326b2 str r0, [sp, 0x14] | var_14h_2 = r0;
0x000326b4 mov r0, r6 | r0 = r6;
0x000326b6 bl 0x5fd0c | gst_structure_n_fields ();
0x000326ba ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000326bc ldr r2, [sp] | r2 = *(sp);
0x000326be cmp r3, r0 |
| if (r3 == r0) {
0x000326c0 beq 0x32740 | goto label_13;
| }
0x000326c2 mov r0, r2 | r0 = r2;
0x000326c4 blx 0x1f1d8 | g_source_set_priority ();
0x000326c8 subs r4, 1 | r4--;
| if (r4 >= 1) {
0x000326ca bhs 0x32612 | goto label_2;
| }
| label_7:
0x000326cc subs.w fp, fp, 1 |
| if (fp >= fp) {
0x000326d0 bhs.w 0x325a8 | goto label_3;
| }
| label_4:
0x000326d4 mov r0, r7 | r0 = r7;
0x000326d6 add sp, 0x4c |
0x000326d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x000326dc ldr r6, [r0] | r6 = *(r0);
0x000326de str r1, [sp] | *(sp) = r1;
0x000326e0 blx 0x1f330 | fcn_0001f330 ();
0x000326e4 ldr r1, [sp] | r1 = *(sp);
| if (r6 == 0) {
0x000326e6 cbz r6, 0x32748 | goto label_10;
| }
0x000326e8 mov r0, r5 | r0 = r5;
0x000326ea bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x000326ee mov r0, r5 | r0 = r5;
0x000326f0 mov r5, r6 | r5 = r6;
0x000326f2 bl 0x5e698 | gst_structure_free ();
0x000326f6 adds r1, r7, 4 | r1 = r7 + 4;
0x000326f8 mov r0, r6 | r0 = r6;
0x000326fa bl 0x5eee8 | gst_structure_set_parent_refcount ();
0x000326fe ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00032700 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00032702 ldr r3, [r3] | r3 = *(r3);
0x00032704 str r6, [r3, r2] | *((r3 + r2)) = r6;
0x00032706 b 0x3260e | goto label_1;
| label_12:
0x00032708 mov r0, r5 | r0 = r5;
0x0003270a bl 0x5fd0c | gst_structure_n_fields ();
0x0003270e str r0, [sp] | *(sp) = r0;
0x00032710 mov r0, r6 | r0 = r6;
0x00032712 bl 0x5fd0c | gst_structure_n_fields ();
0x00032716 ldr r3, [sp] | r3 = *(sp);
0x00032718 cmp r3, r0 |
| if (r3 <= r0) {
0x0003271a ble.w 0x3260e | goto label_1;
| }
0x0003271e mov r0, r5 | r0 = r5;
0x00032720 bl 0x60c90 | r0 = gst_structure_to_string ();
0x00032724 mov r3, r0 | r3 = r0;
0x00032726 mov r0, r6 | r0 = r6;
0x00032728 str r3, [sp] | *(sp) = r3;
0x0003272a bl 0x60c90 | gst_structure_to_string ();
0x0003272e ldr r3, [sp] | r3 = *(sp);
0x00032730 mov r6, r0 | r6 = r0;
0x00032732 mov r0, r3 | r0 = r3;
0x00032734 blx 0x1f14c | fcn_0001f14c ();
0x00032738 mov r0, r6 | r0 = r6;
0x0003273a blx 0x1f14c | fcn_0001f14c ();
0x0003273e b 0x3260e | goto label_1;
| label_13:
0x00032740 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00032742 mov r0, r6 | r0 = r6;
0x00032744 bl 0x5f3a0 | gst_structure_id_take_value ();
| label_10:
0x00032748 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0003274a mov r1, fp | r1 = fp;
0x0003274c mov r0, r7 | r0 = r7;
0x0003274e subs r3, 1 | r3--;
0x00032750 str r3, [sp, 0x10] | var_10h = r3;
0x00032752 bl 0x3148c | gst_caps_remove_structure ();
0x00032756 subs.w fp, fp, 1 |
| if (fp >= fp) {
0x0003275a bhs.w 0x325a8 | goto label_3;
| }
0x0003275e b 0x326d4 | goto label_4;
| label_9:
0x00032760 ldr r0, [sp, 4] | r0 = var_4h_3;
0x00032762 mov r1, r4 | r1 = r4;
0x00032764 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00032768 cmp r0, 0 |
| if (r0 == 0) {
0x0003276a beq.w 0x32606 | goto label_5;
| }
0x0003276e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00032770 cmp r3, 0 |
| if (r3 >= 0) {
0x00032772 bge.w 0x3260a | goto label_6;
| }
0x00032776 b 0x326cc | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x33394 */
| #include <stdint.h>
|
; (fcn) sym.gst_caps_subtract () | void gst_caps_subtract (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x00033394 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00033398 sub sp, 0x34 |
0x0003339a ldr.w r8, [pc, 0x29c] |
0x0003339e add r8, pc | r8 = 0x669dc;
0x000333a0 cmp r0, 0 |
| if (r0 == 0) {
0x000333a2 beq.w 0x33592 | goto label_7;
| }
0x000333a6 mov sb, r1 | sb = r1;
0x000333a8 cmp r1, 0 |
| if (r1 == 0) {
0x000333aa beq.w 0x335b2 | goto label_8;
| }
0x000333ac strh r2, [r0, 8] | *((r0 + 8)) = r2;
0x000333ae ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x000333b0 ands r3, r3, 0x10 | r3 &= 0x10;
| if (r3 == r3) {
0x000333b4 bne 0x333c2 |
0x000333b6 ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x000333b8 cmp r2, 0 |
| if (r2 == 0) {
0x000333ba beq 0x3348a | goto label_9;
| }
0x000333bc ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000333be cmp r2, 0 |
| if (r2 == 0) {
0x000333c0 beq 0x3348a | goto label_9;
| }
| }
0x000333c2 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x000333c6 ands r4, r2, 0x10 | r4 = r2 & 0x10;
| if (r4 != r2) {
0x000333ca bne 0x3348a | goto label_9;
| }
0x000333cc ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x000333d0 cmp r2, 0 |
| if (r2 == 0) {
0x000333d2 beq.w 0x335ec | goto label_10;
| }
0x000333d6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000333d8 str r2, [sp, 0x14] | var_14h = r2;
0x000333da cmp r2, 0 |
| if (r2 == 0) {
0x000333dc beq.w 0x335ec | goto label_10;
| }
0x000333e0 cmp r3, 0 |
| if (r3 != 0) {
0x000333e2 bne.w 0x335d2 | goto label_11;
| }
0x000333e6 mov sl, r3 | sl = r3;
0x000333e8 str r3, [sp, 0xc] | var_0h = r3;
0x000333ea bl 0x3116c | fcn_0003116c (r0);
0x000333ee str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_4h]");
0x000333f2 strd r0, sl, [sp] | __asm ("strd r0, sl, [sp]");
| label_5:
0x000333f6 ldr r3, [sp, 0x10] | r3 = var_4h;
0x000333f8 ldr r2, [sp, 0xc] | r2 = var_0h;
0x000333fa ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000333fc ldr r3, [r3] | r3 = *(r3);
0x000333fe ldr.w sb, [r3, r2, lsl 3] | offset_0 = r2 << 3;
| sb = *((r3 + offset_0));
0x00033402 dmb ish | __asm ("dmb ish");
0x00033406 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x0003340a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0003340c dmb ish | __asm ("dmb ish");
| if (r3 == 0) {
0x00033410 cbnz r3, 0x3341a |
0x00033412 ldr r3, [pc, 0x228] |
0x00033414 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00033418 ldr r3, [r3] | r3 = *(0x3363e);
| }
0x0003341a ldr r4, [sp, 4] | r4 = var_4h_2;
0x0003341c str r3, [sp, 8] | var_8h = r3;
| if (r4 != 0) {
0x0003341e cbz r4, 0x33428 |
0x00033420 ldr r0, [sp] | r0 = *(sp);
0x00033422 bl 0x33164 | gst_caps_unref ();
0x00033426 str r4, [sp] | *(sp) = r4;
| }
0x00033428 bl 0x30dd8 | gst_caps_new_empty ();
0x0003342c ldr r3, [sp] | r3 = *(sp);
0x0003342e str r0, [sp, 4] | var_4h_2 = r0;
0x00033430 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x00033432 ldr.w fp, [r3, 4] | fp = *((r3 + 4));
0x00033436 cmp.w fp, 0 |
| if (fp == 0) {
0x0003343a beq.w 0x335f6 | goto label_12;
| }
0x0003343e movs r5, 0 | r5 = 0;
0x00033440 adds r6, r0, 4 | r6 = r0 + 4;
| do {
0x00033442 ldr r3, [r3] | r3 = *(r3);
0x00033444 ldr.w r7, [r3, r5, lsl 3] | offset_1 = r5 << 3;
| r7 = *((r3 + offset_1));
0x00033448 dmb ish | __asm ("dmb ish");
0x0003344c add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x00033450 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00033452 dmb ish | __asm ("dmb ish");
| if (r4 == 0) {
0x00033456 cbnz r4, 0x33460 |
0x00033458 ldr r3, [pc, 0x1e0] | r3 = *(0x3363c);
0x0003345a ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x0003345e ldr r4, [r3] | r4 = *(0x3363c);
| }
0x00033460 mov r0, r4 | r0 = r4;
0x00033462 bl 0x33f80 | r0 = gst_caps_features_is_any ();
| if (r0 != 0) {
0x00033466 cbz r0, 0x33494 |
0x00033468 ldr r1, [pc, 0x1d4] |
0x0003346a mov.w sl, 0 | sl = 0;
0x0003346e ldr r3, [pc, 0x1d4] | r3 = *(0x33646);
0x00033470 ldr r2, [pc, 0x1d4] |
0x00033472 add r1, pc |
0x00033474 ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x00033478 add.w r1, r1, 0x398 | r1 = 0x66e4e;
0x0003347c add r2, pc | r2 = 0x66ac8;
0x0003347e blx 0x1fdd0 | fcn_0001fdd0 ();
| label_4:
0x00033482 mov r0, sl | r0 = sl;
0x00033484 add sp, 0x34 |
0x00033486 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00033488 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_9:
0x0003348a add sp, 0x34 |
0x0003348c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00033490 b.w 0x30dd8 | void (*0x30dd8)() ();
0x00033492 pop {r1, r5, r7} |
| }
0x00033494 mov r0, r7 | r0 = r7;
0x00033496 bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x0003349a mov sl, r0 | sl = r0;
0x0003349c mov r0, sb | r0 = sb;
0x0003349e bl 0x5f168 | r0 = gst_structure_get_name_id ();
0x000334a2 cmp sl, r0 |
| if (sl == r0) {
0x000334a4 beq 0x33508 | goto label_13;
| }
| label_1:
0x000334a6 mov r0, r7 | r0 = r7;
0x000334a8 bl 0x5ef68 | gst_structure_copy ();
0x000334ac str r0, [sp, 0x28] | var_28h_2 = r0;
| if (r4 != 0) {
0x000334ae cbz r4, 0x334ce |
0x000334b0 mov r0, r4 | r0 = r4;
0x000334b2 bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x000334b6 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000334b8 cbnz r0, 0x334fc | goto label_14;
| }
0x000334ba ldr r3, [pc, 0x180] | r3 = *(0x3363e);
0x000334bc mov r0, r4 | r0 = r4;
0x000334be ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000334c2 ldr r1, [r3] | r1 = *(0x3363e);
0x000334c4 bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 == 0) {
0x000334c8 cbz r0, 0x334fc | goto label_14;
| }
0x000334ca ldr r0, [sp, 0x28] | r0 = var_28h_2;
0x000334cc mov r4, r7 | r4 = r7;
| }
| label_0:
0x000334ce mov r1, r6 | r1 = r6;
0x000334d0 str r4, [sp, 0x2c] | var_2ch = r4;
0x000334d2 bl 0x5eee8 | r0 = gst_structure_set_parent_refcount ();
| if (r0 != 0) {
0x000334d6 cbz r0, 0x334f0 |
0x000334d8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
| if (r0 != 0) {
0x000334da cbz r0, 0x334e4 |
0x000334dc mov r1, r6 | r1 = r6;
0x000334de bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
| if (r0 == 0) {
0x000334e2 cbz r0, 0x334f0 | goto label_6;
| }
| }
0x000334e4 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000334e6 movs r2, 1 | r2 = 1;
0x000334e8 add r1, sp, 0x28 | r1 += var_28h_2;
0x000334ea ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x000334ec blx 0x208f8 | fcn_000208f8 ();
| }
| label_6:
0x000334f0 adds r5, 1 | r5++;
0x000334f2 cmp fp, r5 |
| if (fp == r5) {
0x000334f4 beq 0x335f6 | goto label_12;
| }
0x000334f6 ldr r3, [sp] | r3 = *(sp);
0x000334f8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000334fa b 0x33442 |
| } while (1);
| label_14:
0x000334fc mov r0, r4 | r0 = r4;
0x000334fe bl 0x34224 | r0 = gst_caps_features_copy ();
0x00033502 mov r4, r0 | r4 = r0;
0x00033504 ldr r0, [sp, 0x28] | r0 = var_28h_2;
0x00033506 b 0x334ce | goto label_0;
| label_13:
0x00033508 ldr r1, [sp, 8] | r1 = var_8h;
0x0003350a mov r0, r4 | r0 = r4;
0x0003350c bl 0x33e98 | r0 = gst_caps_features_is_equal ();
0x00033510 cmp r0, 0 |
| if (r0 == 0) {
0x00033512 beq 0x334a6 | goto label_1;
| }
0x00033514 mov r2, sb | r2 = sb;
0x00033516 mov r1, r7 | r1 = r7;
0x00033518 add r0, sp, 0x24 | r0 += var_24h;
0x0003351a bl 0x30b38 | r0 = fcn_00030b38 (r0, r1, r2);
0x0003351e cmp r0, 0 |
| if (r0 == 0) {
0x00033520 beq 0x334a6 | goto label_1;
| }
0x00033522 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00033524 str r3, [sp, 0x18] | var_18h = r3;
0x00033526 cmp r3, 0 |
| if (r3 == 0) {
0x00033528 beq 0x33624 | goto label_15;
| }
0x0003352a add r3, sp, 0x28 | r3 += var_28h_2;
0x0003352c ldr r7, [sp, 0x18] | r7 = var_18h;
0x0003352e mov sl, r3 | sl = r3;
0x00033530 str r5, [sp, 0x1c] | var_1ch_2 = r5;
0x00033532 b 0x33570 | goto label_16;
| label_2:
0x00033534 ldr r2, [pc, 0x104] | r2 = *(0x3363c);
0x00033536 mov r0, r4 | r0 = r4;
0x00033538 ldr.w r2, [r8, r2] | r2 = *((r8 + r2));
0x0003353c ldr r1, [r2] | r1 = *(0x3363c);
0x0003353e bl 0x33e98 | r0 = gst_caps_features_is_equal ();
| if (r0 == 0) {
0x00033542 cbz r0, 0x33586 | goto label_17;
| }
0x00033544 ldr r0, [sp, 0x28] | r0 = var_28h_2;
0x00033546 mov r3, r5 | r3 = r5;
| do {
| label_3:
0x00033548 mov r1, r6 | r1 = r6;
0x0003354a str r3, [sp, 0x2c] | var_2ch = r3;
0x0003354c bl 0x5eee8 | r0 = gst_structure_set_parent_refcount ();
| if (r0 != 0) {
0x00033550 cbz r0, 0x3356a |
0x00033552 ldr r0, [sp, 0x2c] | r0 = var_2ch;
| if (r0 != 0) {
0x00033554 cbz r0, 0x3355e |
0x00033556 mov r1, r6 | r1 = r6;
0x00033558 bl 0x33ab8 | r0 = gst_caps_features_set_parent_refcount ();
| if (r0 == 0) {
0x0003355c cbz r0, 0x3356a | goto label_18;
| }
| }
0x0003355e ldr r3, [sp, 4] | r3 = var_4h_2;
0x00033560 movs r2, 1 | r2 = 1;
0x00033562 mov r1, sl | r1 = sl;
0x00033564 ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x00033566 blx 0x208f8 | fcn_000208f8 ();
| }
| label_18:
0x0003356a ldr r7, [r7, 4] | r7 = *((r7 + 4));
0x0003356c cmp r7, 0 |
| if (r7 == 0) {
0x0003356e beq 0x33622 | goto label_19;
| }
| label_16:
0x00033570 ldr r0, [r7] | r0 = *(r7);
0x00033572 mov r3, r4 | r3 = r4;
0x00033574 str r0, [sp, 0x28] | var_28h_2 = r0;
0x00033576 cmp r4, 0 |
0x00033578 beq 0x33548 |
| } while (r4 == 0);
0x0003357a mov r0, r4 | r0 = r4;
0x0003357c bl 0x33f80 | r0 = gst_caps_features_is_any ();
0x00033580 mov r5, r0 | r5 = r0;
0x00033582 cmp r0, 0 |
| if (r0 == 0) {
0x00033584 beq 0x33534 | goto label_2;
| }
| label_17:
0x00033586 mov r0, r4 | r0 = r4;
0x00033588 bl 0x34224 | r0 = gst_caps_features_copy ();
0x0003358c mov r3, r0 | r3 = r0;
0x0003358e ldr r0, [sp, 0x28] | r0 = var_28h_2;
0x00033590 b 0x33548 | goto label_3;
| label_7:
0x00033592 ldr r1, [pc, 0xb8] |
0x00033594 mov sl, r0 | sl = r0;
0x00033596 ldr r3, [pc, 0xac] | r3 = *(0x33646);
0x00033598 ldr r2, [pc, 0xb4] |
0x0003359a add r1, pc |
0x0003359c ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000335a0 add.w r1, r1, 0x398 | r1 = 0x66f84;
0x000335a4 add r2, pc | r2 = 0x66bf8;
0x000335a6 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000335aa mov r0, sl | r0 = sl;
0x000335ac add sp, 0x34 |
0x000335ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x000335b2 ldr r1, [pc, 0xa0] |
0x000335b4 mov sl, sb | sl = sb;
0x000335b6 ldr r3, [pc, 0x8c] | r3 = *(0x33646);
0x000335b8 ldr r2, [pc, 0x9c] |
0x000335ba add r1, pc |
0x000335bc ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000335c0 add.w r1, r1, 0x398 | r1 = 0x66fac;
0x000335c2 strb r6, [r4, 5] | *((r4 + 5)) = r6;
0x000335c4 add r2, pc | r2 = 0x66c20;
0x000335c6 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000335ca mov r0, sl | r0 = sl;
0x000335cc add sp, 0x34 |
0x000335ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x000335d2 ldr r1, [pc, 0x88] |
0x000335d4 mov sl, r4 | sl = r4;
0x000335d6 ldr r3, [pc, 0x6c] | r3 = *(0x33646);
0x000335d8 ldr r2, [pc, 0x84] |
0x000335da add r1, pc |
0x000335dc ldr.w r0, [r8, r3] | r0 = *((r8 + r3));
0x000335de movs r3, r0 | r3 = r0;
0x000335e0 add.w r1, r1, 0x398 | r1 = 0x66fd4;
0x000335e2 strb r6, [r4, 5] | *((r4 + 5)) = r6;
0x000335e4 add r2, pc | r2 = 0x66c48;
0x000335e6 blx 0x1fdd0 | fcn_0001fdd0 ();
0x000335ea b 0x33482 | goto label_4;
| label_10:
0x000335ec add sp, 0x34 |
0x000335ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000335f2 b.w 0x32e10 | void (*0x32e10)() ();
| label_12:
0x000335f6 ldr r3, [sp, 4] | r3 = var_4h_2;
0x000335f8 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
| if (r3 == 0) {
0x000335fa cbz r3, 0x3362c | goto label_20;
| }
0x000335fc ldr r3, [r3, 4] | r3 = *((r3 + 4));
| if (r3 == 0) {
0x000335fe cbz r3, 0x3362c | goto label_20;
| }
0x00033600 ldr r3, [sp, 0xc] | r3 = var_0h;
0x00033602 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00033604 adds r3, 1 | r3++;
0x00033606 cmp r2, r3 |
0x00033608 str r3, [sp, 0xc] | var_0h = r3;
| if (r2 != r3) {
0x0003360a bne.w 0x333f6 | goto label_5;
| }
0x0003360e ldrd r0, sl, [sp] | __asm ("ldrd r0, sl, [sp]");
0x00033612 bl 0x33164 | gst_caps_unref ();
0x00033616 mov r0, sl | r0 = sl;
0x00033618 add sp, 0x34 |
0x0003361a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003361e b.w 0x3253c | void (*0x3253c)() ();
| label_19:
0x00033622 ldr r5, [sp, 0x1c] | r5 = var_1ch_2;
| label_15:
0x00033624 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00033626 blx 0x1f330 | fcn_0001f330 ();
0x0003362a b 0x334f0 | goto label_6;
| label_20:
0x0003362c ldrd r0, sl, [sp] | __asm ("ldrd r0, sl, [sp]");
0x00033630 bl 0x33164 | gst_caps_unref ();
0x00033634 b 0x33482 | goto label_4;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgstreamer-1.0.so.0.1803.0 @ 0x32858).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
[*] Function system used 3 times libgstreamer-1.0.so.0.1803.0