ホーム › System.Diagnostics.Debug › IMAGE_COFF_SYMBOLS_HEADER
IMAGE_COFF_SYMBOLS_HEADER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| NumberOfSymbols | DWORD | 4 | +0 | +0 | シンボルの個数。 |
| LvaToFirstSymbol | DWORD | 4 | +4 | +4 | 最初のシンボルへの線形仮想アドレス。 |
| NumberOfLinenumbers | DWORD | 4 | +8 | +8 | 行番号エントリの個数。 |
| LvaToFirstLinenumber | DWORD | 4 | +12 | +12 | 最初の行番号エントリへの線形仮想アドレス。 |
| RvaToFirstByteOfCode | DWORD | 4 | +16 | +16 | コード先頭バイトのRVA。 |
| RvaToLastByteOfCode | DWORD | 4 | +20 | +20 | コード末尾バイトのRVA。 |
| RvaToFirstByteOfData | DWORD | 4 | +24 | +24 | データ先頭バイトのRVA。 |
| RvaToLastByteOfData | DWORD | 4 | +28 | +28 | データ末尾バイトのRVA。 |
各言語での定義
#include <windows.h>
// IMAGE_COFF_SYMBOLS_HEADER (x64 32 / x86 32 バイト)
typedef struct IMAGE_COFF_SYMBOLS_HEADER {
DWORD NumberOfSymbols;
DWORD LvaToFirstSymbol;
DWORD NumberOfLinenumbers;
DWORD LvaToFirstLinenumber;
DWORD RvaToFirstByteOfCode;
DWORD RvaToLastByteOfCode;
DWORD RvaToFirstByteOfData;
DWORD RvaToLastByteOfData;
} IMAGE_COFF_SYMBOLS_HEADER;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct IMAGE_COFF_SYMBOLS_HEADER
{
public uint NumberOfSymbols;
public uint LvaToFirstSymbol;
public uint NumberOfLinenumbers;
public uint LvaToFirstLinenumber;
public uint RvaToFirstByteOfCode;
public uint RvaToLastByteOfCode;
public uint RvaToFirstByteOfData;
public uint RvaToLastByteOfData;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure IMAGE_COFF_SYMBOLS_HEADER
Public NumberOfSymbols As UInteger
Public LvaToFirstSymbol As UInteger
Public NumberOfLinenumbers As UInteger
Public LvaToFirstLinenumber As UInteger
Public RvaToFirstByteOfCode As UInteger
Public RvaToLastByteOfCode As UInteger
Public RvaToFirstByteOfData As UInteger
Public RvaToLastByteOfData As UInteger
End Structureimport ctypes
from ctypes import wintypes
class IMAGE_COFF_SYMBOLS_HEADER(ctypes.Structure):
_fields_ = [
("NumberOfSymbols", wintypes.DWORD),
("LvaToFirstSymbol", wintypes.DWORD),
("NumberOfLinenumbers", wintypes.DWORD),
("LvaToFirstLinenumber", wintypes.DWORD),
("RvaToFirstByteOfCode", wintypes.DWORD),
("RvaToLastByteOfCode", wintypes.DWORD),
("RvaToFirstByteOfData", wintypes.DWORD),
("RvaToLastByteOfData", wintypes.DWORD),
]#[repr(C)]
pub struct IMAGE_COFF_SYMBOLS_HEADER {
pub NumberOfSymbols: u32,
pub LvaToFirstSymbol: u32,
pub NumberOfLinenumbers: u32,
pub LvaToFirstLinenumber: u32,
pub RvaToFirstByteOfCode: u32,
pub RvaToLastByteOfCode: u32,
pub RvaToFirstByteOfData: u32,
pub RvaToLastByteOfData: u32,
}import "golang.org/x/sys/windows"
type IMAGE_COFF_SYMBOLS_HEADER struct {
NumberOfSymbols uint32
LvaToFirstSymbol uint32
NumberOfLinenumbers uint32
LvaToFirstLinenumber uint32
RvaToFirstByteOfCode uint32
RvaToLastByteOfCode uint32
RvaToFirstByteOfData uint32
RvaToLastByteOfData uint32
}type
IMAGE_COFF_SYMBOLS_HEADER = record
NumberOfSymbols: DWORD;
LvaToFirstSymbol: DWORD;
NumberOfLinenumbers: DWORD;
LvaToFirstLinenumber: DWORD;
RvaToFirstByteOfCode: DWORD;
RvaToLastByteOfCode: DWORD;
RvaToFirstByteOfData: DWORD;
RvaToLastByteOfData: DWORD;
end;const IMAGE_COFF_SYMBOLS_HEADER = extern struct {
NumberOfSymbols: u32,
LvaToFirstSymbol: u32,
NumberOfLinenumbers: u32,
LvaToFirstLinenumber: u32,
RvaToFirstByteOfCode: u32,
RvaToLastByteOfCode: u32,
RvaToFirstByteOfData: u32,
RvaToLastByteOfData: u32,
};type
IMAGE_COFF_SYMBOLS_HEADER {.bycopy.} = object
NumberOfSymbols: uint32
LvaToFirstSymbol: uint32
NumberOfLinenumbers: uint32
LvaToFirstLinenumber: uint32
RvaToFirstByteOfCode: uint32
RvaToLastByteOfCode: uint32
RvaToFirstByteOfData: uint32
RvaToLastByteOfData: uint32struct IMAGE_COFF_SYMBOLS_HEADER
{
uint NumberOfSymbols;
uint LvaToFirstSymbol;
uint NumberOfLinenumbers;
uint LvaToFirstLinenumber;
uint RvaToFirstByteOfCode;
uint RvaToLastByteOfCode;
uint RvaToFirstByteOfData;
uint RvaToLastByteOfData;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; IMAGE_COFF_SYMBOLS_HEADER サイズ: 32 バイト(x64)
dim st, 8 ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; NumberOfSymbols : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; LvaToFirstSymbol : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; NumberOfLinenumbers : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; LvaToFirstLinenumber : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; RvaToFirstByteOfCode : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; RvaToLastByteOfCode : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; RvaToFirstByteOfData : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; RvaToLastByteOfData : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global IMAGE_COFF_SYMBOLS_HEADER
#field int NumberOfSymbols
#field int LvaToFirstSymbol
#field int NumberOfLinenumbers
#field int LvaToFirstLinenumber
#field int RvaToFirstByteOfCode
#field int RvaToLastByteOfCode
#field int RvaToFirstByteOfData
#field int RvaToLastByteOfData
#endstruct
stdim st, IMAGE_COFF_SYMBOLS_HEADER ; NSTRUCT 変数を確保
st->NumberOfSymbols = 100
mes "NumberOfSymbols=" + st->NumberOfSymbols