找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 13750|回复: 6

求 通过SMBIOS获得BIOS大小 代码

[复制链接]
发表于 2008-3-29 08:17:15 | 显示全部楼层 |阅读模式
我在debug里的步骤:, t. f; F0 l  E  T. h
-s f000:0 ffff'SM'
3 I% G7 j! F$ z& ^! X0 RF000:BFB16 k8 H. W; Y8 p2 W$ B$ Z/ O. p
-d f000:bfb0
0 p$ `3 ?  S( f8 ]& d) Z7 jF000:BFB0  5F 53 4D 5F C7 1F 02 04-B6 00 00 00 00 00 00 00   _SM_............
, |) h' {+ X  r' AF000:BFC0  5F 44 4D 49 5F 08 23 07-F0 06 0F 00 31 00 00 9E   _DMI_.#.....1...4 R! t: c6 D2 ~" z* b
F000:BFD0  C7 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................1 K' o; e1 V. V, ^
F000:BFE0  9C 53 67 8B 5D 00 83 EB-50 B8 81 00 81 FB 05 00   .Sg.]...P.......& ~: H$ {: L, e$ _8 n: W$ m) o
F000:BFF0  73 07 D1 E3 2E FF 97 8D-C0 5B 9D CB E8 01 00 CB   s........[......( z) g' Q( w8 [3 b& a
F000:C000  60 8A 04 E8 49 00 72 44-E3 3F F6 C5 80 74 2D 80   `...I.rD.?...t-.
: ^7 t' R2 [9 X3 _, Q% E! D; h8 \F000:C010  F9 01 75 38 0F B6 08 26-3A 09 75 30 E3 2B 1E 56   ..u8...&:.u0.+.V
; ^. }7 U- o) R! G% h, S3 sF000:C020  51 06 1F 8B F7 E8 2D 06-8B FE 8B D1 59 5E 1F E8   Q.....-.....Y^..
8 R9 |* j: Z0 \7 g-d f000:06f03 s  [9 v, \' P: f# O0 ^0 G) E
F000:06F0  00 18 00 00 01 02 00 F0-03 07 90 DE 8B 7F 01 00   ................4 J* s" B9 N$ ]( g8 E' a1 H
F000:0700  00 00 33 05 08 0C FF FF-41 6D 65 72 69 63 61 6E   ..3.....American
; `8 ^( Y8 S: s, c: d/ C0 m% NF000:0710  20 4D 65 67 61 74 72 65-6E 64 73 20 49 6E 63 2E    Megatrends Inc.
+ Z$ b5 p+ f: q# l7 i6 XF000:0720  00 30 32 30 31 20 20 20-00 30 35 2F 30 31 2F 32   .0201   .05/01/2
. d) x& x( \. h! w& k& FF000:0730  30 30 37 00 00 01 1B 01-00 01 02 03 04 A0 08 75   007............u2 o3 p2 r2 r$ q8 _, o
F000:0740  6F 8D FE D5 11 A0 90 00-1B FC A0 07 38 06 05 06   o...........8...' G% S) H* E6 p+ m2 Q3 n! Q
F000:0750  53 79 73 74 65 6D 20 6D-61 6E 75 66 61 63 74 75   System manufactu1 U$ N  t( m! P! H/ p
F000:0760  72 65 72 00 53 79 73 74-65 6D 20 50 72 6F 64 75   rer.System Produ# a. A4 q; }4 m" L) l" t3 ^
( Y8 k9 c/ `6 r; t+ x

1 Y/ E- B3 P% Y4 o4 A6 C  Z# w' F我要读出这里的06f9:07
/ C: W3 B$ ~# h! e3 S4 v- A 然后得到一个(07+1)*64=512 这样来获取BIOS大小-
7 |( q& b" X6 L6 R! a2 r, Z6 Y, a3 A* l
用c++怎么来完成这些步骤呢?求热心人帮我写一个完整的代码: D. \' k0 U) Z" {# m
谢谢
发表于 2008-4-1 12:56:39 | 显示全部楼层
你在这里获取的只是DMI的信息,如果BIOS没有放在这里的话,就无法拿到DMI信息。
1 _! n) N% E7 P正确做法是从内存最高端向下512个字节才是你要的东西,如果是在DOS下的话,就要开4G访问模式。3 B* |/ Q" T! Q$ u3 I
至于如何实现,可以问google
回复

使用道具 举报

发表于 2008-4-1 13:23:53 | 显示全部楼层
楼主是做软件的么?
回复

使用道具 举报

发表于 2008-4-1 21:31:37 | 显示全部楼层
觉得汇编比较好写,贴一个:0 Y4 g4 \! ?- c0 r: E2 S2 v1 h
.model small, Q! T  e1 t! Y- C
.386; `5 J6 i9 W) ~- D
.data
7 R, K/ m7 ~7 a" _  w( d    SMBIOS_Sign db '_SM_'
3 v2 \1 _2 }( c.code7 m+ v4 m! D- ~* F* \
start:, Y7 U, L0 I6 r  G5 j* k3 n* \
    mov ax, seg SMBIOS_Sign7 @4 z( x, e- V- ], }% `
    mov es, ax
! @: S6 c/ t' Q# q5 |7 k- o    mov ax, 0f000h
. ]+ s# z% t2 V. X4 X7 o9 A    mov ds, ax
9 C  P" t. h  i  j/ ^    mov si, 07 Z: W/ p: \0 Q% d+ r; A
    mov cx, 04000h
) F& H4 v/ R- E1 U# Z* i7 Q5 b    cld; b1 y* Y  j. Y! v; I
@@:& _+ X! k' z! i2 `
    lodsd
, W# \3 e. l" Q9 \    dec cx3 ?/ ~' {0 Z4 Q2 k/ Y3 I* E( C6 b  D
    jz  short @F
9 d, h/ g) H( _0 S; n    cmp eax,dword ptr es:[SMBIOS_Sign]- ^' q8 U1 {2 M6 G
    jnz short @B/ _1 _' }# X8 T# H
@@:
* D: y- s8 a1 V6 ^, @, `) }    or  cx, cx
$ ^$ H' \6 H* P6 m# N  P3 @    jz  short @exit
/ R4 x' |  L7 l" k    add si, 14h
* j# X% y# b- Y. |* G! @1 ^    mov ax, ds:[si]& c3 M  \! y4 A( B6 X$ t: V
    add ax, 09h+ P  Q, H: i  j' I; ]* a
    mov di, ax3 l4 b: c" G; j$ G& S. I
    xor bx, bx1 K( G9 o, O0 h& q; n# |, e
    mov bl, ds:[di]0 o* A' u: ?! _
    inc bl
, K7 C7 Q/ r" M! e* N) L# g* A    shl bx,6* l2 ~  h. L: P) D6 E; H4 b% `
@exit:5 T6 E; X2 f, [* N( M
    mov ah,4ch
/ U# M/ X8 R; Q5 U    int 21h
8 J4 V( Z+ Q+ v3 H6 h; gend start
5 S1 t* V: O/ y+ q* z, s8 Wcseg ends
" M( d: G3 T' ~0 a推测你的算法是:
/ F6 l4 v* \' l: }% }5 k1.找'_SM_',然后在其后offset 18h的地方为下一个offset28 P* }1 P5 }% A; s  z
2.找到这个offset2+9的地方的值
3 ?( w2 j$ B. x2 @5 _% H/ K4 w, K6 P3.此值加一,乘以64为BIOS Size,在bx中.
, Z8 f" E+ W% C: i$ {4 o! n5 r& C不过我的机器上,BIOS Size不是在这个地方的.
回复

使用道具 举报

发表于 2009-2-12 17:29:22 | 显示全部楼层
DATAS SEGMENT! l5 ?. L$ [' t; |- m3 a
    ;此处输入数据段代码  1 T! Q+ w& P' N% b
DATAS ENDS
2 G3 x) j; w5 p) Z+ b) m9 \- x# D! N" {
STACKS SEGMENT! y& c/ ?2 o6 U2 G  H, d+ w
    ;此处输入堆栈段代码
/ N, h3 C5 e* d6 _6 TSTACKS ENDS9 B+ T$ \9 [/ M# a
' x1 y; B% g% k5 X
CODES SEGMENT1 k1 s2 C0 e3 a3 }) y9 @0 f
    ASSUME CS:CODES,DSATAS,SS:STACKS/ Q4 [2 p4 L1 P" S( M- J5 z+ k
.486, V- J, _* P( w" m: r
START:$ e6 ~, C' E3 u( x
    MOV AX,0f000h
$ L% U' r) m5 K8 r2 s    MOV DS,AX
% k( W! U& w  E! M5 r! ?3 x3 w1 T    ;此处输入代码段代码" o  F; J) H0 H, \  D7 L& C
    mov si,0
! S8 h+ A) _3 Y8 x1 B! E/ w$ b   last: 9 K$ F: o3 \, E. K9 I" f
    mov eax,[si]9 G; t( g; n9 I
    cmp eax,5f4d535fh
4 n7 Y2 [0 Y9 a  V    je over1 z1 G- q, t6 ~1 L
    add si,10h7 h" S" W! w9 b( g) m! ?3 F) n
    jmp last  g+ y- b: _3 C$ y. Y
    5 \9 g; O2 W' j7 p9 i/ X7 J
    over:# F, ^" x6 Q5 ^4 H8 I5 v- _3 Y% r
    add si,18h8 d* i) w' m; M8 ^
    mov eax,[si]
- ]0 Q8 _. J2 B. L3 K    mov si,ax
9 b: A; x* y2 W4 o6 ?9 U" O2 _    add si,9
5 n, p9 y  {# h* c# \4 J' r    mov ax,[si]! U0 I* R: G2 ~: F- d) U4 ], b
    add al,1
% x, c" Y! ~6 c9 o4 L8 V    mov bl,643 A1 K' t- V$ m/ F
    mul bl. V7 b5 P  Q" \: j: C
    mov bx,ax. T8 b6 G8 A$ E& o3 c
   + f9 ]/ u, O! t! ]" Q
    call display  P5 O: @, Q5 l9 c1 E+ v$ b
    MOV AH,4CH
! S$ e. i" V8 i' y1 |    INT 21H  / F' V* K3 O+ G" I
    % y- |( s" R6 c0 N; C" t
    display proc near
% |! O1 Z; m/ I; h2 E   push ax
" S7 L* C, h( ?6 j/ k$ i, L( \$ n   push bx
1 o3 P7 c4 W& c9 b   push cx: F. W$ d. M9 i; x
   mov ch,41 f$ ^) u/ [: E) s, R
  rotate:mov cl,4+ G* W7 i) J  O0 P: a
   rol bx,cl6 ]7 @: a( X# `4 Z; R4 k
   mov al,bl
  V' E! u4 e4 m   and al,0fh
2 g  r7 h6 d  J/ D5 k   add al,30h
0 `, K; W+ x- `1 c# T6 A   cmp al,3ah
' K! V, l9 |+ f# Y* T   jl printit, n* u4 u# }# `1 g! n  _) Q
   add al,7h7 z, P$ f' A' Y, P, X6 E
  printit:
8 \/ D3 g; Z" E( o' H# _4 S  mov dl,al1 l$ h& N' [( V6 d8 L
  mov ah,2
9 A3 l8 J3 B: ~3 e( _  int 21h$ r( o4 w- o; S; U1 I: {  E
  dec ch
8 f9 h' ?4 g. M; C  d  jnz rotate  Z; n. T7 i. O- _2 {
  mov dl,20h
- x" r7 r1 \' o5 k. |& l! q! t. O4 u  mov ah,2h
, r0 o3 y6 j; t0 h  int 21h% K- T6 L. c; R% m0 w8 l
  pop cx- ~& F! Q8 \( T& ]
  pop bx
$ m9 T" Z! p" J8 i  pop ax
; `1 r) |4 f) h6 M1 {4 e- P  ret
/ a3 m2 K, M- }; ]  display endp
3 [6 }3 l. ^* \8 T  o3 {' t% R" Q- W* P; \
CODES ENDS
- Z  b( @6 V0 B. ~5 s    END START
+ I, p, j3 W& W( K$ o" ]5 Q$ v- ~7 |) g  X# t
运行此程序可显示ROM大小.单位以K计算,不过是十六进制的
回复

使用道具 举报

发表于 2009-2-14 22:19:38 | 显示全部楼层
原帖由 coolsun" ^  |* j0 F9 c4 P
DATAS SEGMENT
% z2 d/ O5 m0 y    ;此处输入数据段代码  
6 x+ P  V4 d" v: T) R3 I0 I" n7 XDATAS ENDS) b: k' ]; ]' @- Q. t4 v

( Q. t; D  b: q& v( F6 e& KSTACKS SEGMENT) |7 @; Y, X) Y( d8 m0 r
    ;此处输入堆栈段代码. X: t  }) H% L2 X: C/ E! @- \
STACKS ENDS1 F+ G: I$ v/ t; U- j+ n
& L- H; B8 B! Q! Z% K4 h
CODES SEGMENT) Q- [6 `! f0 p0 ?5 \+ \
    ASSUME CS:CODES,DSATAS,SS:STACKS2 Y! _* I) e" B) U3 K
.486
; l- S# y" f1 Z$ w8 I: tSTART:
6 u, O8 V; V* f" D1 ~8 X    MOV AX,0f000h! p  v3 h/ [& h' O& i$ ?
    MOV DS,AX ...
  f: B* h% ^+ a6 F5 B
二楼不是说了如果smbios没在这里放bios的大小,这种方式不行吗。. ~# i6 S2 k9 I  O! ?
/ r( |+ t6 L# i5 f. R
还是直接读rom芯片参数最好
回复

使用道具 举报

发表于 2009-2-16 17:13:15 | 显示全部楼层
只是 在F0000h-FFFFFh搜索而已,这是smBios范围.而并未指定 其地址在F0000h处.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-4-20 03:37 , Processed in 0.041576 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表