Приветствую всех!
Есть видеобиос:
Вложение:
Asus ENGT440 DC SL_DI_1GD3 - VBIOS [70.08.4D.00.AS12].rar
Есть
описание структур видеобиоса.
Пока стопорнулся на том, откуда в дампе идёт отсчёт offset-ов в указателях "Data Pointer".Вот в дампе по адресу 0x1B4 идёт указатель "Data Pointer" первой "BIT Token"-структуры. В указателе адрес 2C02->0x22C.
Откуда считать эти 0x22C? ---------- Добавлено спустя 3 часа 37 минут: ---------- Выяснил, что отсчёт offset-ов указателей прямо с начала дампа. Т.е. адреса в указателях прямые.
---------- Добавлено спустя 1 час 59 минут 8 секунд: ---------- Снова стопорнулся на длине данных и формате записи.
Рассматриваю 8-ой BIT_Token (адрес в дампе 0x1DA).
Разобрав этот token по "BIT Token Structure". Находим, что ID=0x4D (BIT_MEMORY_PTRS), "Data Version"=2, "Data Size"=1100->0x11, "Data Pointer"=8202->0x282.
По адресу 0x282 стуктура BIT_MEMORY_PTRS (Version 2).
Разобрав её находим следующее: "Memory Strap Data Count"=0x8; "Memory Strap Translation Table Pointer"=104A->0x4A10; "Memory Information Table Pointer"=D54A->0x4AD5; Reserved (8 байт)=7F690000A2690000 (почему-то имеют какие-то данные); "Memory Partition Information Table"=4C4B0000->0x4B4C; "Memory Script List Pointer"=должно быть 4 байта, но эта запись выходит за пределы размера структуры (BIT_Token.Data Size=0x11) - в чём здесь косяк?.
Теперь пройдясь к адресу "Memory Strap Translation Table Pointer"=0x4A10 как узнать, какой размер у этой таблицы и какой формат записи.
Т.е. есть указатели: "Memory Strap Translation Table Pointer", "Memory Information Table Pointer", "Memory Partition Information Table", "Memory Script List Pointer".
А размер таблиц по адресам указателей не знаем и формат записи тоже не знаем. И так по всей доке - можно найти все указатели, а размер таблиц и формат записи не известен из этой документации.
Может кто знает, где есть описание размера таблиц и формат записи?
---------- Добавлено спустя 1 час 52 минуты 7 секунд: ---------- Нашёл исходники
[linux-nvgpu.git] (последние изменения 2019-02-23).
Из исходника "\linux-nvgpu\drivers\gpu\nvgpu\common\vbios\bios.c" выходит, что структура "BIT_MEMORY_PTRS (Version 2)" не соответствует описанию в доке по ссылке выше.
По исходнику эта структура имеет вид:
struct memory_ptrs_v2 {
u8 mem_strap_data_count; // 1 байт
u16 mem_strap_xlat_tbl_ptr; // 2 байта
u8 rsvd[14]; // 14 байт
} __packed;
Если брать "memory_ptrs_v2"-данные дампа по исходнику, то размер сходится 0x11. Но в резервные 14 байт входят данные "D54A7F690000A26900004C4B0000" - тоже не понятно, зачем данные в резервной области.