ShareElfFile$ElfHeader.smali
.class public Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;
.super Ljava/lang/Object;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/tencent/tinker/loader/shareutil/ShareElfFile;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = "ElfHeader"
.end annotation
# static fields
.field public static final EI_CLASS:I = 0x4
.field public static final EI_DATA:I = 0x5
.field private static final EI_NINDENT:I = 0x10
.field public static final EI_VERSION:I = 0x6
.field public static final ELFCLASS32:I = 0x1
.field public static final ELFCLASS64:I = 0x2
.field public static final ELFDATA2LSB:I = 0x1
.field public static final ELFDATA2MSB:I = 0x2
.field public static final ET_CORE:I = 0x4
.field public static final ET_DYN:I = 0x3
.field public static final ET_EXEC:I = 0x2
.field public static final ET_HIPROC:I = 0xffff
.field public static final ET_LOPROC:I = 0xff00
.field public static final ET_NONE:I = 0x0
.field public static final ET_REL:I = 0x1
.field public static final EV_CURRENT:I = 0x1
# instance fields
.field public final eEhSize:S
.field public final eEntry:J
.field public final eFlags:I
.field public final eIndent:[B
.field public final eMachine:S
.field public final ePhEntSize:S
.field public final ePhNum:S
.field public final ePhOff:J
.field public final eShEntSize:S
.field public final eShNum:S
.field public final eShOff:J
.field public final eShStrNdx:S
.field public final eType:S
.field public final eVersion:I
# direct methods
.method private constructor <init>(Ljava/nio/channels/FileChannel;)V
.registers 11
const/4 v8, 0x3
const/4 v7, 0x0
const/4 v6, 0x2
const/4 v5, 0x4
const/4 v4, 0x1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/16 v0, 0x10
new-array v0, v0, [B
iput-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
const-wide/16 v0, 0x0
invoke-virtual {p1, v0, v1}, Ljava/nio/channels/FileChannel;->position(J)Ljava/nio/channels/FileChannel;
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
invoke-static {v0}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
move-result-object v0
invoke-virtual {p1, v0}, Ljava/nio/channels/FileChannel;->read(Ljava/nio/ByteBuffer;)I
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v7
const/16 v1, 0x7f
if-ne v0, v1, :cond_3c
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v4
const/16 v1, 0x45
if-ne v0, v1, :cond_3c
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v6
const/16 v1, 0x4c
if-ne v0, v1, :cond_3c
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v8
const/16 v1, 0x46
if-eq v0, v1, :cond_73
:cond_3c
new-instance v0, Ljava/io/IOException;
const-string/jumbo v1, "bad elf magic: %x %x %x %x."
new-array v2, v5, [Ljava/lang/Object;
iget-object v3, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v3, v3, v7
invoke-static {v3}, Ljava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
move-result-object v3
aput-object v3, v2, v7
iget-object v3, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v3, v3, v4
invoke-static {v3}, Ljava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
move-result-object v3
aput-object v3, v2, v4
iget-object v3, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v3, v3, v6
invoke-static {v3}, Ljava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
move-result-object v3
aput-object v3, v2, v6
iget-object v3, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v3, v3, v8
invoke-static {v3}, Ljava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
move-result-object v3
aput-object v3, v2, v8
invoke-static {v1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:cond_73
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v5
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "bad elf class: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget-object v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v2, v2, v5
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
# invokes: Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->assertInRange(IIILjava/lang/String;)V
invoke-static {v0, v4, v6, v1}, Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->access$300(IIILjava/lang/String;)V
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
const/4 v1, 0x5
aget-byte v0, v0, v1
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "bad elf data encoding: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget-object v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
const/4 v3, 0x5
aget-byte v2, v2, v3
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
# invokes: Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->assertInRange(IIILjava/lang/String;)V
invoke-static {v0, v4, v6, v1}, Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->access$300(IIILjava/lang/String;)V
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v5
if-ne v0, v4, :cond_123
const/16 v0, 0x24
:goto_bb
invoke-static {v0}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v1
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
const/4 v2, 0x5
aget-byte v0, v0, v2
if-ne v0, v4, :cond_126
sget-object v0, Ljava/nio/ByteOrder;->LITTLE_ENDIAN:Ljava/nio/ByteOrder;
:goto_c8
invoke-virtual {v1, v0}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
const-string/jumbo v0, "failed to read rest part of ehdr."
invoke-static {p1, v1, v0}, Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->readUntilLimit(Ljava/nio/channels/FileChannel;Ljava/nio/ByteBuffer;Ljava/lang/String;)V
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eType:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eMachine:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getInt()I
move-result v0
iput v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eVersion:I
iget v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eVersion:I
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v3, "bad elf version: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
iget v3, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eVersion:I
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
# invokes: Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->assertInRange(IIILjava/lang/String;)V
invoke-static {v0, v4, v4, v2}, Lcom/tencent/tinker/loader/shareutil/ShareElfFile;->access$300(IIILjava/lang/String;)V
iget-object v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v0, v0, v5
packed-switch v0, :pswitch_data_17c
new-instance v0, Ljava/io/IOException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v2, "Unexpected elf class: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
iget-object v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eIndent:[B
aget-byte v2, v2, v5
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:cond_123
const/16 v0, 0x30
goto :goto_bb
:cond_126
sget-object v0, Ljava/nio/ByteOrder;->BIG_ENDIAN:Ljava/nio/ByteOrder;
goto :goto_c8
:pswitch_129
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getInt()I
move-result v0
int-to-long v2, v0
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eEntry:J
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getInt()I
move-result v0
int-to-long v2, v0
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->ePhOff:J
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getInt()I
move-result v0
int-to-long v2, v0
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eShOff:J
:goto_13e
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getInt()I
move-result v0
iput v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eFlags:I
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eEhSize:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->ePhEntSize:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->ePhNum:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eShEntSize:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eShNum:S
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getShort()S
move-result v0
iput-short v0, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eShStrNdx:S
return-void
:pswitch_169
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getLong()J
move-result-wide v2
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eEntry:J
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getLong()J
move-result-wide v2
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->ePhOff:J
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->getLong()J
move-result-wide v2
iput-wide v2, p0, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;->eShOff:J
goto :goto_13e
:pswitch_data_17c
.packed-switch 0x1
:pswitch_129
:pswitch_169
.end packed-switch
.end method
.method synthetic constructor <init>(Ljava/nio/channels/FileChannel;Lcom/tencent/tinker/loader/shareutil/ShareElfFile$1;)V
.registers 3
invoke-direct {p0, p1}, Lcom/tencent/tinker/loader/shareutil/ShareElfFile$ElfHeader;-><init>(Ljava/nio/channels/FileChannel;)V
return-void
.end method