MinElf.smali
.class public final Lcom/facebook/soloader/MinElf;
.super Ljava/lang/Object;
.source "SourceFile"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/facebook/soloader/MinElf$ElfError;,
Lcom/facebook/soloader/MinElf$ISA;
}
.end annotation
# static fields
.field public static final DT_NEEDED:I = 0x1
.field public static final DT_NULL:I = 0x0
.field public static final DT_STRTAB:I = 0x5
.field public static final ELF_MAGIC:I = 0x464c457f
.field public static final PN_XNUM:I = 0xffff
.field public static final PT_DYNAMIC:I = 0x2
.field public static final PT_LOAD:I = 0x1
.field private static final TAG:Ljava/lang/String; = "MinElf"
# direct methods
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static extract_DT_NEEDED(Lcom/facebook/soloader/ElfByteChannel;)[Ljava/lang/String;
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 5
instance-of v0, p0, Lcom/facebook/soloader/ElfFileChannel;
if-eqz v0, :cond_b
.line 6
check-cast p0, Lcom/facebook/soloader/ElfFileChannel;
invoke-static {p0}, Lcom/facebook/soloader/MinElf;->extract_DT_NEEDED_with_retries(Lcom/facebook/soloader/ElfFileChannel;)[Ljava/lang/String;
move-result-object p0
return-object p0
.line 7
:cond_b
invoke-static {p0}, Lcom/facebook/soloader/MinElf;->extract_DT_NEEDED_no_retries(Lcom/facebook/soloader/ElfByteChannel;)[Ljava/lang/String;
move-result-object p0
return-object p0
.end method
.method public static extract_DT_NEEDED(Ljava/io/File;)[Ljava/lang/String;
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
new-instance v0, Lcom/facebook/soloader/ElfFileChannel;
invoke-direct {v0, p0}, Lcom/facebook/soloader/ElfFileChannel;-><init>(Ljava/io/File;)V
.line 2
:try_start_5
invoke-static {v0}, Lcom/facebook/soloader/MinElf;->extract_DT_NEEDED(Lcom/facebook/soloader/ElfByteChannel;)[Ljava/lang/String;
move-result-object p0
:try_end_9
.catchall {:try_start_5 .. :try_end_9} :catchall_d
.line 3
invoke-virtual {v0}, Lcom/facebook/soloader/ElfFileChannel;->close()V
return-object p0
:catchall_d
move-exception p0
.line 4
:try_start_e
invoke-virtual {v0}, Lcom/facebook/soloader/ElfFileChannel;->close()V
:try_end_11
.catchall {:try_start_e .. :try_end_11} :catchall_12
goto :goto_16
:catchall_12
move-exception v0
invoke-virtual {p0, v0}, Ljava/lang/Throwable;->addSuppressed(Ljava/lang/Throwable;)V
:goto_16
throw p0
.end method
.method private static extract_DT_NEEDED_no_retries(Lcom/facebook/soloader/ElfByteChannel;)[Ljava/lang/String;
.registers 28
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
move-object/from16 v0, p0
const/16 v1, 0x8
.line 1
invoke-static {v1}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v1
.line 2
sget-object v2, Ljava/nio/ByteOrder;->LITTLE_ENDIAN:Ljava/nio/ByteOrder;
invoke-virtual {v1, v2}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
const-wide/16 v2, 0x0
.line 3
invoke-static {v0, v1, v2, v3}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v2
const-wide/32 v4, 0x464c457f
cmp-long v6, v2, v4
if-nez v6, :cond_205
const-wide/16 v2, 0x4
.line 4
invoke-static {v0, v1, v2, v3}, Lcom/facebook/soloader/MinElf;->getu8(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)S
move-result v2
const/4 v3, 0x1
if-ne v2, v3, :cond_24
goto :goto_25
:cond_24
const/4 v3, 0x0
:goto_25
const-wide/16 v4, 0x5
.line 5
invoke-static {v0, v1, v4, v5}, Lcom/facebook/soloader/MinElf;->getu8(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)S
move-result v2
const/4 v4, 0x2
if-ne v2, v4, :cond_33
.line 6
sget-object v2, Ljava/nio/ByteOrder;->BIG_ENDIAN:Ljava/nio/ByteOrder;
invoke-virtual {v1, v2}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
:cond_33
const-wide/16 v4, 0x1c
const-wide/16 v6, 0x20
if-eqz v3, :cond_3e
.line 7
invoke-static {v0, v1, v4, v5}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
goto :goto_42
:cond_3e
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
:goto_42
const-wide/16 v10, 0x2c
if-eqz v3, :cond_47
goto :goto_49
:cond_47
const-wide/16 v10, 0x38
.line 8
:goto_49
invoke-static {v0, v1, v10, v11}, Lcom/facebook/soloader/MinElf;->getu16(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)I
move-result v2
int-to-long v10, v2
if-eqz v3, :cond_53
const-wide/16 v12, 0x2a
goto :goto_55
:cond_53
const-wide/16 v12, 0x36
.line 9
:goto_55
invoke-static {v0, v1, v12, v13}, Lcom/facebook/soloader/MinElf;->getu16(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)I
move-result v2
const-wide/32 v12, 0xffff
const-wide/16 v14, 0x28
cmp-long v16, v10, v12
if-nez v16, :cond_7d
if-eqz v3, :cond_69
.line 10
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v6
goto :goto_6d
:cond_69
invoke-static {v0, v1, v14, v15}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v6
:goto_6d
if-eqz v3, :cond_75
add-long/2addr v6, v4
.line 11
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
goto :goto_7c
:cond_75
const-wide/16 v4, 0x2c
add-long/2addr v6, v4
.line 12
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
:goto_7c
move-wide v10, v4
:cond_7d
const-wide/16 v4, 0x0
move-wide v6, v8
:goto_80
const-wide/16 v14, 0x8
cmp-long v16, v4, v10
if-gez v16, :cond_b4
if-eqz v3, :cond_91
const-wide/16 v16, 0x0
add-long v12, v6, v16
.line 13
invoke-static {v0, v1, v12, v13}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v12
goto :goto_98
:cond_91
const-wide/16 v12, 0x0
add-long/2addr v12, v6
.line 14
invoke-static {v0, v1, v12, v13}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v12
:goto_98
const-wide/16 v16, 0x2
cmp-long v20, v12, v16
if-nez v20, :cond_ae
if-eqz v3, :cond_a8
const-wide/16 v4, 0x4
add-long/2addr v6, v4
.line 15
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
goto :goto_b6
:cond_a8
add-long/2addr v6, v14
.line 16
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
goto :goto_b6
:cond_ae
int-to-long v12, v2
add-long/2addr v6, v12
const-wide/16 v12, 0x1
add-long/2addr v4, v12
goto :goto_80
:cond_b4
const-wide/16 v4, 0x0
:goto_b6
const-wide/16 v6, 0x0
cmp-long v12, v4, v6
if-eqz v12, :cond_1fd
const/4 v12, 0x0
move-wide/from16 v20, v4
move-wide v12, v6
const/4 v14, 0x0
:goto_c1
if-eqz v3, :cond_ca
add-long v6, v20, v6
.line 17
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v6
goto :goto_d0
:cond_ca
add-long v6, v20, v6
invoke-static {v0, v1, v6, v7}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v6
:goto_d0
const-string v15, "malformed DT_NEEDED section"
const-wide/16 v18, 0x1
cmp-long v22, v6, v18
if-nez v22, :cond_e8
move-wide/from16 v22, v4
const v4, 0x7fffffff
if-eq v14, v4, :cond_e2
add-int/lit8 v14, v14, 0x1
goto :goto_104
.line 18
:cond_e2
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
invoke-direct {v0, v15}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
:cond_e8
move-wide/from16 v22, v4
const-wide/16 v4, 0x5
cmp-long v24, v6, v4
if-nez v24, :cond_104
if-eqz v3, :cond_fb
const-wide/16 v4, 0x4
add-long v4, v20, v4
.line 19
invoke-static {v0, v1, v4, v5}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
goto :goto_103
:cond_fb
const-wide/16 v4, 0x8
add-long v12, v20, v4
invoke-static {v0, v1, v12, v13}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
:goto_103
move-wide v12, v4
:cond_104
:goto_104
const-wide/16 v4, 0x10
if-eqz v3, :cond_10b
const-wide/16 v24, 0x8
goto :goto_10d
:cond_10b
move-wide/from16 v24, v4
:goto_10d
add-long v20, v20, v24
const-wide/16 v24, 0x0
cmp-long v26, v6, v24
if-nez v26, :cond_1f3
cmp-long v6, v12, v24
if-eqz v6, :cond_1eb
const/4 v6, 0x0
move/from16 v26, v14
move-object v7, v15
:goto_11d
int-to-long v14, v6
cmp-long v20, v14, v10
if-gez v20, :cond_17e
if-eqz v3, :cond_12b
add-long v14, v8, v24
.line 20
invoke-static {v0, v1, v14, v15}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v14
goto :goto_131
:cond_12b
add-long v14, v8, v24
.line 21
invoke-static {v0, v1, v14, v15}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v14
:goto_131
const-wide/16 v18, 0x1
cmp-long v20, v14, v18
if-nez v20, :cond_175
if-eqz v3, :cond_142
const-wide/16 v14, 0x8
add-long v4, v8, v14
.line 22
invoke-static {v0, v1, v4, v5}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
goto :goto_147
:cond_142
add-long/2addr v4, v8
.line 23
invoke-static {v0, v1, v4, v5}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v4
:goto_147
if-eqz v3, :cond_151
const-wide/16 v14, 0x14
add-long/2addr v14, v8
.line 24
invoke-static {v0, v1, v14, v15}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v14
goto :goto_158
:cond_151
const-wide/16 v14, 0x28
add-long/2addr v14, v8
.line 25
invoke-static {v0, v1, v14, v15}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v14
:goto_158
cmp-long v20, v4, v12
if-gtz v20, :cond_175
add-long/2addr v14, v4
cmp-long v20, v12, v14
if-gez v20, :cond_175
if-eqz v3, :cond_16b
const-wide/16 v10, 0x4
add-long/2addr v8, v10
.line 26
invoke-static {v0, v1, v8, v9}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
goto :goto_172
:cond_16b
const-wide/16 v10, 0x8
add-long/2addr v8, v10
.line 27
invoke-static {v0, v1, v8, v9}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
:goto_172
sub-long/2addr v12, v4
add-long/2addr v12, v8
goto :goto_180
:cond_175
int-to-long v4, v2
add-long/2addr v8, v4
add-int/lit8 v6, v6, 0x1
const-wide/16 v4, 0x10
const-wide/16 v24, 0x0
goto :goto_11d
:cond_17e
const-wide/16 v12, 0x0
:goto_180
const-wide/16 v4, 0x0
cmp-long v2, v12, v4
if-eqz v2, :cond_1e3
move/from16 v14, v26
.line 28
new-array v2, v14, [Ljava/lang/String;
const/4 v6, 0x0
move-wide v8, v4
move-wide/from16 v4, v22
:goto_18e
add-long/2addr v8, v4
if-eqz v3, :cond_196
.line 29
invoke-static {v0, v1, v8, v9}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
goto :goto_19a
:cond_196
invoke-static {v0, v1, v8, v9}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v8
:goto_19a
const-wide/16 v18, 0x1
cmp-long v10, v8, v18
if-nez v10, :cond_1c9
const-wide/16 v10, 0x4
if-eqz v3, :cond_1ac
add-long/2addr v10, v4
.line 30
invoke-static {v0, v1, v10, v11}, Lcom/facebook/soloader/MinElf;->getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v10
const-wide/16 v15, 0x8
goto :goto_1b4
:cond_1ac
const-wide/16 v15, 0x8
add-long v10, v4, v15
invoke-static {v0, v1, v10, v11}, Lcom/facebook/soloader/MinElf;->get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
move-result-wide v10
:goto_1b4
add-long/2addr v10, v12
.line 31
invoke-static {v0, v1, v10, v11}, Lcom/facebook/soloader/MinElf;->getSz(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)Ljava/lang/String;
move-result-object v10
aput-object v10, v2, v6
const v10, 0x7fffffff
if-eq v6, v10, :cond_1c3
add-int/lit8 v6, v6, 0x1
goto :goto_1cb
.line 32
:cond_1c3
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
invoke-direct {v0, v7}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
:cond_1c9
const-wide/16 v15, 0x8
:goto_1cb
if-eqz v3, :cond_1cf
move-wide v10, v15
goto :goto_1d1
:cond_1cf
const-wide/16 v10, 0x10
:goto_1d1
add-long/2addr v4, v10
const-wide/16 v10, 0x0
cmp-long v17, v8, v10
if-nez v17, :cond_1e1
if-ne v6, v14, :cond_1db
return-object v2
.line 33
:cond_1db
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
invoke-direct {v0, v7}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
:cond_1e1
move-wide v8, v10
goto :goto_18e
.line 34
:cond_1e3
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
const-string v1, "did not find file offset of DT_STRTAB table"
invoke-direct {v0, v1}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
.line 35
:cond_1eb
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
const-string v1, "Dynamic section string-table not found"
invoke-direct {v0, v1}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
:cond_1f3
const-wide/16 v15, 0x8
const-wide/16 v18, 0x1
move-wide/from16 v4, v22
move-wide/from16 v6, v24
goto/16 :goto_c1
.line 36
:cond_1fd
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
const-string v1, "ELF file does not contain dynamic linking information"
invoke-direct {v0, v1}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
.line 37
:cond_205
new-instance v0, Lcom/facebook/soloader/MinElf$ElfError;
const-string v1, "file is not ELF: 0x"
.line 38
invoke-static {v1}, Landroid/support/v4/media/c;->c(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
.line 39
invoke-static {v2, v3}, Ljava/lang/Long;->toHexString(J)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private static extract_DT_NEEDED_with_retries(Lcom/facebook/soloader/ElfFileChannel;)[Ljava/lang/String;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/4 v0, 0x0
.line 1
:goto_1
:try_start_1
invoke-static {p0}, Lcom/facebook/soloader/MinElf;->extract_DT_NEEDED_no_retries(Lcom/facebook/soloader/ElfByteChannel;)[Ljava/lang/String;
move-result-object p0
:try_end_5
.catch Ljava/nio/channels/ClosedByInterruptException; {:try_start_1 .. :try_end_5} :catch_6
return-object p0
:catch_6
move-exception v1
add-int/lit8 v0, v0, 0x1
const/4 v2, 0x4
if-gt v0, v2, :cond_13
.line 2
invoke-static {}, Ljava/lang/Thread;->interrupted()Z
.line 3
invoke-virtual {p0}, Lcom/facebook/soloader/ElfFileChannel;->openChannel()V
goto :goto_1
.line 4
:cond_13
throw v1
.end method
.method private static get64(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/16 v0, 0x8
.line 1
invoke-static {p0, p1, v0, p2, p3}, Lcom/facebook/soloader/MinElf;->read(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;IJ)V
.line 2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->getLong()J
move-result-wide p0
return-wide p0
.end method
.method private static getSz(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)Ljava/lang/String;
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
:goto_5
const-wide/16 v1, 0x1
add-long/2addr v1, p2
.line 2
invoke-static {p0, p1, p2, p3}, Lcom/facebook/soloader/MinElf;->getu8(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)S
move-result p2
if-eqz p2, :cond_14
int-to-char p2, p2
.line 3
invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
move-wide p2, v1
goto :goto_5
.line 4
:cond_14
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p0
return-object p0
.end method
.method private static getu16(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)I
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/4 v0, 0x2
.line 1
invoke-static {p0, p1, v0, p2, p3}, Lcom/facebook/soloader/MinElf;->read(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;IJ)V
.line 2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->getShort()S
move-result p0
const p1, 0xffff
and-int/2addr p0, p1
return p0
.end method
.method private static getu32(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)J
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/4 v0, 0x4
.line 1
invoke-static {p0, p1, v0, p2, p3}, Lcom/facebook/soloader/MinElf;->read(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;IJ)V
.line 2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->getInt()I
move-result p0
int-to-long p0, p0
const-wide p2, 0xffffffffL
and-long/2addr p0, p2
return-wide p0
.end method
.method private static getu8(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;J)S
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/4 v0, 0x1
.line 1
invoke-static {p0, p1, v0, p2, p3}, Lcom/facebook/soloader/MinElf;->read(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;IJ)V
.line 2
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->get()B
move-result p0
and-int/lit16 p0, p0, 0xff
int-to-short p0, p0
return p0
.end method
.method private static read(Lcom/facebook/soloader/ElfByteChannel;Ljava/nio/ByteBuffer;IJ)V
.registers 8
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
const/4 v0, 0x0
.line 1
invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 2
invoke-virtual {p1, p2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
.line 3
:goto_7
invoke-virtual {p1}, Ljava/nio/Buffer;->remaining()I
move-result p2
if-lez p2, :cond_18
.line 4
invoke-interface {p0, p1, p3, p4}, Lcom/facebook/soloader/ElfByteChannel;->read(Ljava/nio/ByteBuffer;J)I
move-result p2
const/4 v1, -0x1
if-ne p2, v1, :cond_15
goto :goto_18
:cond_15
int-to-long v1, p2
add-long/2addr p3, v1
goto :goto_7
.line 5
:cond_18
:goto_18
invoke-virtual {p1}, Ljava/nio/Buffer;->remaining()I
move-result p0
if-gtz p0, :cond_22
.line 6
invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
return-void
.line 7
:cond_22
new-instance p0, Lcom/facebook/soloader/MinElf$ElfError;
const-string p1, "ELF file truncated"
invoke-direct {p0, p1}, Lcom/facebook/soloader/MinElf$ElfError;-><init>(Ljava/lang/String;)V
throw p0
.end method