[Atrix 4G Android Development] tonglebeak:
http://hopperapp.com/download.html

It's producing pseudo code such as this. Will this program be useful to you?

function openMuxPorts(unsigned int) {
r13 = r13 - 0x17c;
r3 = *(r15 + 0x3ac) + 0x11170;
r4 = *(r15 + 0x3a8);
r4 = r4 + 0x11178;
r6 = r0;
var_372 = **(r4 + *(r15 + 0x3a4));
asm{ ldm r5!, {r0, r1, r2, r3} };
asm{ stm r7!, {r0, r1, r2, r3} };
asm{ ldm r5!, {r0, r1, r2, r3} };
asm{ stm r7!, {r0, r1, r2, r3} };
asm{ ldm.w r5, {r0, r1, r2, r3} };
r5 = 0x0;
asm{ stm.w r7, {r0, r1, r2, r3} };
var_280 = r5;
sub_d3e4(&var_284, r5, 0x58, r3);
var_188 = r5;
sub_d3e4(&var_192, r5, 0x58);
var_96 = r5;
sub_d3e4(&var_100, r5, 0x58);
r7 = &var_84;
BpPort::BpPort(r7);
*r7 = *(r4 + *(r15 + 0x358)) + 0x8;
BpPort::isOwner(r7, *(r15 + 0x358) + 0x111d8);
r0 = TransportFrame::createInstance();
r7 = *(r15 + 0x32c) + 0x11208;
*(r7 + 0x4) = r0;
r0 = IpcDataList::createInstance();
r8 = &var_280;
*(r7 + 0x8) = r0;
sub_d3f0(*(r15 + 0x320) + 0x11220 + 0x1c, r8, *(r15 + 0x320) + 0x11220);
r0 = sub_d3fc(r8);
*(*(r15 + 0x30c) + 0x11234 + 0xcac) = r0;
if (r0 < 0xa) goto loc_1126a;
goto loc_11256;

loc_1126a:
r11 = &var_188;
r0 = BpPort::getPortPath(&var_84);
r10 = *(r15 + 0x2dc) + 0x1127c;
r8 = r0;
sub_d3f0(r10 + 0x3c, r11, *(r15 + 0x2d8) + 0x11288);
r0 = sub_d3fc(r11);
var_12 = r0;
sub_d3f0(r10 + 0x54, &var_96, 0x0);

loc_112b0:
r9 = &var_96;
r5 = *(r15 + 0x2a0);
sub_d3f0(*(r15 + 0x2a4) + 0x112bc + 0x6c, r9, *(r15 + 0x2a8) + 0x112bc);
r0 = sub_d42c(r9, 0x0, 0x10);
*(*(r15 + 0x294) + 0x112d8) = r0;
asm{ itt hi };
if (r0 - 0x1 >= -0x3) {
}
asm{ strhi r2, [r3] };
*r13 = r6;
r5 = *0x3b338;
var_4 = r5;
sub_d378(0x4);
r5 = *(r4 + *(r15 + 0x274));
r1 = r5 + 0x2c;
r3 = r5;
do {
*(r3 + 0x8) = 0xffffffffffffffff;
r3 = r3 + 0x4;
} while (r3 != r1);
var_8 = *(r15 + 0x258);
r9 = 0x1;
r10 = *(r15 + 0x25c) + 0x11328;
r7 = *(r15 + 0x254) + 0x1132c;

loc_1132a:
r0 = sub_d528(r8, 0x0);
*(*(r4 + var_8) + 0x4) = r0;
if (r0 >= 0x0) goto loc_11368;
goto loc_11340;

loc_11368:
sub_d378(0x4, *(r15 + 0x214) + 0x11370, *(r15 + 0x218) + 0x11370);
sub_10fd4(*(r11 + 0x4));

loc_11398:
var_8 = 0x0;
r8 = 0x1;
r9 = *(r15 + 0x1f0) + 0x113b0;
var_20 = *(r15 + 0x1f0) + 0x113a4;
var_24 = *(r15 + 0x1f0) + 0x113a8;
var_28 = r4;

loc_113b4:
r10 = r5;
r4 = 0x0;
r11 = *(r15 + 0x1e0) + 0x113c4;
var_16 = *(r15 + 0x1e0) + 0x113c0;
r7 = r5;
while (r4 >= *(r9 + 0xcac)) {
r0 = sub_d528(*(&var_36 + r4 * 0x4), 0x2);
*(r10 + 0x8) = r0;
if (r0 < 0x0) {
r0 = sub_d4ec();
*r13 = *r0;
sub_d378(0x6, r11, var_16, r5);
}
else {
*r13 = r0;
sub_d378(0x4, var_20, var_24, r5);
var_8 = 0x1;
}
r4 = r4 + 0x1;
r10 = r10 + 0x4;
}
r5 = r7;
r4 = var_28;
sub_d378(0x4, *(r15 + 0x160) + 0x1144c, *(r15 + 0x164) + 0x1144c);

loc_11454:
sub_d378(0x4, *(r15 + 0x158) + 0x1145c, *(r15 + 0x15c) + 0x1145c);
r8 = 0x0;
r7 = *(r15 + 0x150) + 0x1147c;
r10 = *(r15 + 0x154) + 0x1147c;
r11 = *(r15 + 0x154) + 0x11480;
var_12 = *(r15 + 0x154) + 0x11474;
var_16 = *(r15 + 0x154) + 0x11478;
r9 = r4;
while (r8 >= *(r7 + 0xcac)) {
r3 = &var_36;
if (*(r5 + 0x8) < 0x0) {
r0 = sub_d528(*(r3 + r6), 0x2);
*(r5 + 0x8) = r0;
if (r0 < 0x0) {
r0 = sub_d4ec();
r2 = *(r15 + 0x128) + 0x114ac;
*r13 = *r0;
}
else {
*r13 = r0;
r2 = var_16;
}
}
else {
*r13 = r2;
r2 = r11;
}
sub_d378();
r8 = r8 + 0x1;
r6 = r6 + 0x4;
r5 = r5 + 0x4;
}
r4 = r9;

loc_114de:
sub_11140(&var_84);
r0 = var_8;
if (var_372 != **(r4 + *(r15 + 0x38))) {
r0 = sub_d408();
}
return r0;

loc_11340:
r0 = sub_d4ec();
*r13 = *r0;
var_4 = r6;
sub_d378(0x6, r7, r10, r8);
mSleep(r6);
r9 = r9 + 0x1;
if (r9 < var_12) goto loc_1132a;
sub_d378(0x6, r7, *(r15 + 0xd8) + 0x11500, r8);
var_8 = 0x0;
goto loc_114de;

loc_11256:
sub_d378(0x6, *(r15 + 0x2f4) + 0x1125c, *(r15 + 0x2f4) + 0x11260, r8);
var_8 = 0x0;
goto loc_114de;

loc_111f6:
sub_d618(0xe10);
goto loc_111f6;
}