User Tools

Site Tools


start

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

start [2014/01/08 08:11]
archerhatmaker simply a profile webpage.
start [2014/01/09 13:47] (current)
xvilka
Line 1: Line 1:
-A lοt of folks feel that getting tο be bodily match is an nearly unreachable puгpose. Your fitness journey need to have not be difficult оr agonizing. Producing life-style modifications will allow you to improve your overall health ​and attain your ambitions.nnYou may want tο consiԁer receiving a pair of sessions ωith а private trainer when establishing your work out routine. Your private coach сan asѕist ​you fulfill ​your ambitionѕ and establish a health routine that is appropгiate fоr your needs. Getting іntο a fitness center ​can be tough to do, but getting a trainer ​can assist since they can preѕent ​you what to do.url>http://www.metacafe.com/embed/11259651/ 440,248 This helps make it leѕs difficult for you to stick wіth your ρrеpare.nnAre you strapped for time when it will come tо functioning out? Break up up your workout. This doesn'​t іmply you have to perform out far more - just do 50 % yоur traіning every single time. Alternatively ​of undеrtaking a one partіcular houг training, do a half hour early in the day advertisement the other 50 % later. If you don't want to strike the gymnasium two times in 1 day yоu can do a single fitness center workout, and a singlе outdoorѕ training.nnWhen you are working оut you must guarantee that you breathe ​out after at any time rep. Thiѕ wіll allow your physique set out a lot more power whilst making ​it possible fоr you to get more oxygen into your blood. By carrying ​out this, you get far more power down the highway.nnWhen you physical exercise, ѕoon after fat repetitions, be confident to enable ​out a enormouѕ exhale. Thіs will let your body place out a lot moгe power althοugh enabling you to get muсh more oxygen into your blood. By caгrying ​out this, you get more strength down the street.nnBecаuse performing exercises often is not burning as a lot in the way of еnergy as a dieter would hope, thеy at times consider exeгcising to extremеs. Саrrying ​out this puts you at chance of muscle ​and ϳoint damage, coronary heart troubles, dehydration, and other actual physical issues. Also, it can trigger you to finish up in an anaеrobic state. In this ѕtate, уou are not burning fat.nnIf you are likely ​to backslide on your work out program, publish down a plan so you really don't negleсt ​to get it cаrried out. Fit physical exercise into your plan all 7 days and make sure you stick to by means of with it. If you totally ​should ​οѵerlook a day of health, plan a make-uρ working daу, and treat it with equal relevance.nn6 A.M ѕession. m. Commence out little by little by obtaining up about fifteen minutes early, and uѕing people minutes to wander, sоar rope, some sit-ups or other еxercises. In excess of time, you can impгove the time you start off уour working day аnd physical еxercisе program. In the meantime, you are creating positive habits.nnStarting dipѕ is a great health idеas. Dips are an successful workout to work not only your triceps, but уour chest аnd shoulders, too. There are numerous approaches you can do them as well. You could try dipping amongst two benches. The more fat you incorporate,​ the far more you can build them аs nicely.nnIn addition to performing crunches, dо some sit-ups. Sit-ups have turn out to be unpopular in current a long time. Continue to be secure, do not try out tо do any of the anchored-feet variety ​of sit ups. Your back again will likely endure from this tyρe of sit-ups. If you adored this write-up ​and you would certаinly such aѕ to obtain even moгe details regarԁing ​[[http://newgarciniacambogiareview.blogspot.com|gnc garcinia cambogia]] kindly check out our webpage. nnWalking your ρеt can be element of your health and fitness regime. Your furry friend will constantly be up for a stroll. Cоmmence by gеtting a brief wаnder. Wander close to your neighborhood, ѵenturing more afar ωhen your health amounts enhance. If yοu own a pet, take them along. They will give you with enthusіasm and comρany.nnImprove your set by aiming seventeen inches past the gap you are focusing on. This region will be totallу free from footprints. The grass is also a tiny thicker whіch has the impact of slowing your ball a little bit.nnGetting ​by youгself some [[http://Www.Google.de/search?q=rollerblades|rollerblades]] is a excellent way to get much morе bodily mаtch. Rollerblаding has witnessed а lower in popularity in modern уears, but it iѕ an exceptional way to melt away some energy ​and exercіsing. Rollerblades are nonetheless obtainable at a lot of stores.nnSquatting with weights is a wonderful all-aгound workout. Barbell squats not only buіld many distinct musclе groups, they also lead to your entire body to secrеte much more expansion hοrmone, which is wοnderful for getting mass.nnIf you have wounded muscles, ease agaіn into working out. Transient, mild exercise routines will stop re-injuring the afflicted muscle tissueѕ and actuallу market speedier healing. Bу gently strеtching muscle tissues that агe іnjureԁ, you boost the flow of blooԁ ​and oxygen tο them.nnBecоming fitter and muсh mοre wholesome might be tough, but it isn't something to be dreadeԁ. Integrate the tips from this article into your exiѕting fitness software. Attempt to believe of excellеnt health as a day-to-day practice. Far more physical exercise with better frequency will very easily aid you rеach your health ​and fitnesѕ targets.+==== Tracing ==== 
 + 
 +See [[ida_pro_tracing]] and [[radare2_tracing]] 
 + 
 +==== Other firmares ==== 
 + 
 +  * [[embedded_controller]] 
 +  * [[intel_amt]] 
 +  * [[video_bios]] 
 + 
 +==== Prerequisites ==== 
 + 
 +1. radare2 
 +  git clone git://​github.com/​radare/​radare2 
 +2. You can use such commands ​to paste output of r2 to vim: 
 +in radare2 start command **.:​8080** ​and in vim use 
 +  :r!echo x|ncat 127.0.0.1 8080 
 +You should disable color output for that: 
 +  e scr.color=false 
 +   
 + 
 +==== All kind of BIOSes ==== 
 + 
 +Open bios image just typing 
 + 
 +  r2 bios_image.bin 
 + 
 +It should be opened automatically,​ created segment relocation and jumped directly on entry point: 
 + 
 +  [f000:​fff0]>​ 
 +   
 +But, if it not yet recognized automatically, ​you can do this by your hands: 
 + 
 +1. Open bios file with radare2 using this command: 
 + 
 +  r2 -e asm.bits=16 -e io.va=true bios_image.bin 
 + 
 +2. Do bootblock segment relocation:​ 
 + 
 +  [0x00000000]>​ S $s-0x10000 0xf000:​0x0000 0x10000 0x10000 bootblk rwx 
 + 
 +where '​$s'​ - variable, file size (see output of '???'​ command) 
 + 
 +You can also set DOS-like addressing notation: 
 + 
 +  [0x00000000]>​ e asm.segoff=true 
 +  [0000:​0000]>​ 
 + 
 +3. go to 0xf000:​0xfff0, where BIOS starts 
 + 
 +  [0000:​0000]>​ s 0xf000:​0xfff0 
 + 
 +You can seek also by **s section.bootblk+0xfff0** 
 +Also you can add flags base too: 
 + 
 +  [0000:​0000]>​ fb section.bootblk 
 + 
 +==== AMIBIOS ==== 
 + 
 +See example here http://​xvilka.me/​ami_bios.bin 
 + 
 +Download example from http://​xvilka.me/​asrock_p4i65g.bin and open it as usual. 
 +Also you can download r2 database file with all mentioned stuff (and more) from http://​xvilka.me/​asrock_p4i65g.r2 (Just load ut after loading *.bin file using '​.'​ command). 
 +It is based on ICH5 southbridge,​ download datasheet here http://www.intel.com/content/dam/doc/​datasheet/​82801eb-82801er-io-controller-hub-datasheet.pdf 
 + 
 +4. Disassembly, set flag to this as bios_entry 
 + 
 +  [f000:​fff0]>​ pd 1; f entry = 0xfff0 
 +  [f000:​fff0]>​ f entry_j 1 0xf000:<​addr>​ 
 +where <​addr>​ shown in previous command 
 +or just run 
 +  [f000:​fff0]>​ f entry_j 1 `pi 1~[2]` 
 +which take addr from that jump automatically 
 + 
 +5. Jump table. From previous entry we have found jump to table of jumps. 
 +Int our case it is 34 jumps (found by counting ​'jmp' opcode before first '​call'​ opcode). 
 +'​Question 1' - how to count these jumps??? 
 +Lets see them: 
 + 
 +  [f000:​0040]>​ pd 34 
 +  f000:​0040 ​     e9cd00 jmp word 0x111 
 +  f000:​0043 ​     e94a5c jmp word 0x5c90 
 +  f000:​0046 ​     e9e50b jmp word 0xc2e 
 +  f000:​0049 ​     e98011 jmp word 0x11cc 
 +  f000:​004c ​     e9a70c jmp word 0xcf6 
 +  f000:​004f ​     e91246 jmp word 0x4664 
 +  f000:​0052 ​     e97710 jmp word 0x10cc 
 +  f000:​0055 ​     e9564b jmp word 0x4bae 
 +  f000:​0058 ​     e9624c jmp word 0x4cbd 
 +  f000:​005b ​     e9c34b jmp word 0x4c21 
 +  f000:​005e ​     e9df48 jmp word 0x4940 
 +  f000:​0061 ​     e94449 jmp word 0x49a8 
 +  f000:​0064 ​     e92f57 jmp word 0x5796 
 +  f000:​0067 ​     e9e54c jmp word 0x4d4f 
 +  f000:​006a ​     e9265c jmp word 0x5c93 
 +  f000:​006d ​     e9bf00 jmp word 0x12f 
 +  f000:​0070 ​     e92104 jmp word 0x494 
 +  f000:​0073 ​     e9eb05 jmp word 0x661 
 +  f000:​0076 ​     e9f105 jmp word 0x66a 
 +  f000:​0079 ​     e93c4d jmp word 0x4db8 
 +  f000:​007c ​     e96f4c jmp word 0x4cee 
 +  f000:​007f ​     e9cd00 jmp word 0x14f 
 +  f000:​0082 ​     e93a48 jmp word 0x48bf 
 +  f000:​0085 ​     e9fc52 jmp word 0x5384 
 +  f000:​0088 ​     e9cd00 jmp word 0x158 
 +  f000:​008b ​     e9a54a jmp word 0x4b33 
 +  f000:​008e ​     e9ca00 jmp word 0x15b 
 +  f000:​0091 ​     e9ca00 jmp word 0x15e 
 +  f000:​0094 ​     e9ca00 jmp word 0x161 
 +  f000:​0097 ​     e95211 jmp word 0x11ec 
 +  f000:​009a ​     e9940b jmp word 0xc31 
 +  f000:​009d ​     e9bf0e jmp word 0xf5f 
 +  f000:​00a0 ​     e9a348 jmp word 0x4946 
 +  f000:​00a3 ​     e9d200 jmp word 0x178 
 +  [f000:​0040]>​ 
 + 
 +Lets mark these jumps as _j1 - _j34 : 
 +  [f000:​0040]>​ 
 + 
 +6. First function from jump table 
 + 
 +  [f000:​0040]>​ s 0f000:​`pi ​1~[2]` 
 +  [f000:​0110]>​ pd 
 +  f000:​0110 ​     fa               cli 
 +  f000:​0111 ​     fc               cld 
 +  f000:​0112 ​     668be0 ​          mov esp, eax 
 +  f000:​0115 ​     8cc8             mov ax, cs 
 +  f000:​0117 ​     8ed0             mov ss, ax 
 +  f000:​0119 ​     668bea ​          mov ebp, edx 
 +  f000:​011c ​     b0d0             mov al, 0xd0 
 +  f000:​011e ​     e680             out 0x80, al 
 +  f000:​0120 ​     bf2601 ​          mov di, 0x126 
 +  f000:​0123 ​     e91a04 ​          jmp word 0x540 
 +  f000:​0126 ​     8cc8             mov ax, cs 
 +  f000:​0128 ​     8ed8             mov ds, ax 
 +  f000:​012a ​     8ec0             mov es, ax 
 +  f000:​012c ​     e914ff ​          jmp word 0x43 
 +  f000:​012f ​     b0d1             mov al, 0xd1 
 +  f000:​0131 ​     e680             out 0x80, al 
 +  f000:​0133 ​     b00c             mov al, 0xc 
 +  f000:​0135 ​     e661             out 0x61, al 
 +  f000:​0137 ​     be9004 ​          mov si, 0x490 
 +  f000:​013a ​     81fe9204 ​        cmp si, 0x492 
 +  f000:​013e ​     730c             jae 0xf014c 
 +   .... 
 + 
 +Lets see, what we got: 
 +line **f000:​011e ​out 0x80, al** - POST code, with 0xD0 value in this case 
 +add comment for that: 
 +  [f000:​0110]>​ CCa f000:011e D0 POST CODE 
 + 
 +See also line **f000:0120 mov di, 0x126**, where 0x126 is offset to next+1 instuction 
 +Looks suspicios, isnt it? Let see what on addr f000:0540 
 +  [f000:​0540]>​ pd 
 +  f000:​0540 ​     6633c0 ​          xor eax, eax 
 +  f000:​0543 ​     0fa2             ​cpuid 
 +  f000:​0545 ​     6681fb47656e75 ​  cmp ebx, 0x756e6547 
 +  f000:​054c ​     7404             jz 0xf0552 
 +  f000:​054e ​     fa               cli 
 +  f000:​054f ​     f4               hlt 
 +  f000:​0550 ​     ebfc             jmp 0xf054e 
 +  f000:​0552 ​     0f08             ​invd 
 +  f000:​0554 ​     0f6eff ​          movd mm7, edi 
 +  f000:​0557 ​     668bc4 ​          mov eax, esp 
 +  f000:​055a ​     e9c806 ​          jmp word 0xc25 
 + 
 +Here we are trying ​to check CPU vendor (0x756e6547 == '​enuG',​ which is part of '​Genuine Intel'​),​ 
 +one deadloop: 
 +  ​.-> f000:​054f ​     f4               hlt 
 +  `=< f000:​0550 ​     ebfc             jmp 0xf054e 
 + 
 +and one local jump: 
 +  f000:​054c ​   jz 0xf0552 
 +  ... 
 +  f000:​0552 ​   invd 
 +  ... 
 + 
 + 
 +=== PCI Access === 
 + 
 +  [f000:​12fd]>​ pd 
 + 
 +  f000:​12fd ​     668be2 ​          mov esp, edx 
 +  f000:​1300 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​1304 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​1309 ​     660fc4d400 ​      ​pinsrw xmm2, sp, 0x0 
 +  f000:​130e ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​1313 ​     660fc4d200 ​      ​pinsrw xmm2, dx, 0x0 
 +  f000:​1318 ​     baf80c ​          mov dx, 0xcf8 
 +  f000:​131b ​     660d00000080 ​    or eax, 0x80000000 
 +  f000:​1321 ​     6683e0fc ​        and eax, 0xfffffffc 
 +  f000:​1325 ​     66ef             out dx, eax 
 +  f000:​1327 ​     bafc0c ​          mov dx, 0xcfc 
 +  f000:​132a ​     668bc3 ​          mov eax, ebx 
 +  f000:​132d ​     66ef             out dx, eax 
 +  f000:​132f ​     660f7ed2 ​        movd edx, xmm2 
 +  f000:​1333 ​     660f73da04 ​      ​psrldq xmm2, 0x4 
 +  f000:​1338 ​     660fc5e400 ​      ​pextrw esp, xmm4, 0x0 
 +  f000:​133d ​     660f73dc02 ​      ​psrldq xmm4, 0x2 
 +  f000:​1342 ​     ffe4             jmp sp 
 + 
 +This is **PCI_WriteDword_SSE(uint32_t pci_addr<​eax>,​ uint32_t val<​ebx>​)** function 
 + 
 +  f000:​1344 ​     668be1 ​          mov esp, ecx 
 +  f000:​1347 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​134b ​     660f73f902 ​      ​pslldq xmm1, 0x2 
 +  f000:​1350 ​     660fc4cc00 ​      ​pinsrw xmm1, sp, 0x0 
 +  f000:​1355 ​     660f73f902 ​      ​pslldq xmm1, 0x2 
 +  f000:​135a ​     660fc4c900 ​      ​pinsrw xmm1, cx, 0x0 
 +  f000:​135f ​     668be2 ​          mov esp, edx 
 +  f000:​1362 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​1366 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​136b ​     660fc4d400 ​      ​pinsrw xmm2, sp, 0x0 
 +  f000:​1370 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​1375 ​     660fc4d200 ​      ​pinsrw xmm2, dx, 0x0 
 +  f000:​137a ​     8bc8             mov cx, ax 
 +  f000:​137c ​     baf80c ​          mov dx, 0xcf8 
 +  f000:​137f ​     660d00000080 ​    or eax, 0x80000000 
 +  f000:​1385 ​     6683e0fc ​        and eax, 0xfffffffc 
 +  f000:​1389 ​     66ef             out dx, eax 
 +  f000:​138b ​     bafc0c ​          mov dx, 0xcfc 
 +  f000:​138e ​     83e102 ​          and cx, 0x2 
 +  f000:​1391 ​     03d1             add dx, cx 
 +  f000:​1393 ​     8bc3             mov ax, bx 
 +  f000:​1395 ​     ef               out dx, ax 
 +  f000:​1396 ​     660f7ed2 ​        movd edx, xmm2 
 +  f000:​139a ​     660f73da04 ​      ​psrldq xmm2, 0x4 
 +  f000:​139f ​     660f7ec9 ​        movd ecx, xmm1 
 +  f000:​13a3 ​     660f73d904 ​      ​psrldq xmm1, 0x4 
 +  f000:​13a8 ​     660fc5e400 ​      ​pextrw esp, xmm4, 0x0 
 +  f000:​13ad ​     660f73dc02 ​      ​psrldq xmm4, 0x2 
 +  f000:​13b2 ​     ffe4             jmp sp 
 + 
 +This is **PCI_WriteWord_SSE(uint32_t pci_addr<​eax>​, uint16_t val<​bx>​)** function 
 + 
 +  f000:​13b4 ​     668be1 ​          mov esp, ecx 
 +  f000:​13b7 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​13bb ​     660f73f902 ​      ​pslldq xmm1, 0x2 
 +  f000:​13c0 ​     660fc4cc00 ​      ​pinsrw xmm1, sp, 0x0 
 +  f000:​13c5 ​     660f73f902 ​      ​pslldq xmm1, 0x2 
 +  f000:​13ca ​     660fc4c900 ​      ​pinsrw xmm1, cx, 0x0 
 +  f000:​13cf ​     668be2 ​          mov esp, edx 
 +  f000:​13d2 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​13d6 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​13db ​     660fc4d400 ​      ​pinsrw xmm2, sp, 0x0 
 +  f000:​13e0 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​13e5 ​     660fc4d200 ​      ​pinsrw xmm2, dx, 0x0 
 +  f000:​13ea ​     8bc8             mov cx, ax 
 +  f000:​13ec ​     baf80c ​          mov dx, 0xcf8 
 +  f000:​13ef ​     660d00000080 ​    or eax, 0x80000000 
 +  f000:​13f5 ​     6683e0fc ​        and eax, 0xfffffffc 
 +  f000:​13f9 ​     66ef             out dx, eax 
 +  f000:​13fb ​     bafc0c ​          mov dx, 0xcfc 
 +  f000:​13fe ​     83e103 ​          and cx, 0x3 
 +  f000:​1401 ​     03d1             add dx, cx 
 +  f000:​1403 ​     8ac3             mov al, bl 
 +  f000:​1405 ​     ee               out dx, al 
 +  f000:​1406 ​     660f7ed2 ​        movd edx, xmm2 
 +  f000:​140a ​     660f73da04 ​      ​psrldq xmm2, 0x4 
 +  f000:​140f ​     660f7ec9 ​        movd ecx, xmm1 
 +  f000:​1413 ​     660f73d904 ​      ​psrldq xmm1, 0x4 
 +  f000:​1418 ​     660fc5e400 ​      ​pextrw esp, xmm4, 0x0 
 +  f000:​141d ​     660f73dc02 ​      ​psrldq xmm4, 0x2 
 +  f000:​1422 ​     ffe4             jmp sp 
 + 
 +This is **PCI_WriteByte_SSE(uint32_t pci_addr<​eax>,​ uint8_t val<​bl>​)** function 
 + 
 +  f000:​1424 ​     668be2 ​          mov esp, edx 
 +  f000:​1427 ​     66c1ec10 ​        shr esp, 0x10 
 +  f000:​142b ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​1430 ​     660fc4d400 ​      ​pinsrw xmm2, sp, 0x0 
 +  f000:​1435 ​     660f73fa02 ​      ​pslldq xmm2, 0x2 
 +  f000:​143a ​     660fc4d200 ​      ​pinsrw xmm2, dx, 0x0 
 +  f000:​143f ​     baf80c ​          mov dx, 0xcf8 
 +  f000:​1442 ​     660d00000080 ​    or eax, 0x80000000 
 +  f000:​1448 ​     6683e0fc ​        and eax, 0xfffffffc 
 +  f000:​144c ​     66ef             out dx, eax 
 +  f000:​144e ​     bafc0c ​          mov dx, 0xcfc 
 +  f000:​1451 ​     66ed             in eax, dx 
 +  f000:​1453 ​     660f7ed2 ​        movd edx, xmm2 
 +  f000:​1457 ​     660f73da04 ​      ​psrldq xmm2, 0x4 
 +  f000:​145c ​     660fc5e400 ​      ​pextrw esp, xmm4, 0x0 
 +  f000:​1461 ​     660f73dc02 ​      ​psrldq xmm4, 0x2 
 +  f000:​1466 ​     ffe4             jmp sp 
 + 
 +=== ROM Call === 
 + 
 +1. Go to **f000:​0b3c** 
 + 
 +  [f000:​0b3c]>​ pd 
 +  f000:​0b3c ​     8eec             mov gs, sp 
 +  f000:​0b3e ​     8ee3             mov fs, bx 
 +  f000:​0b40 ​     bc460b ​          mov sp, 0xb46 
 +  f000:​0b43 ​     e99af8 ​          jmp word 0x3e0 
 +  f000:​0b46 ​     48               dec ax 
 +  f000:​0b47 ​     0b6681 ​          or sp, [bp-0x7f] 
 +  f000:​0b4a ​     ee               out dx, al 
 + 
 +were function, which is calling from f000:0b43 (jmp word f000:0x3e0) is **get_decomp_block_size** 
 + 
 +  [f000:​03e0]>​ pd 
 +  f000:​03e0 ​     662e8b0ed7ff ​    mov ecx, [cs:​0xffd7] 
 +  f000:​03e6 ​     668bf1 ​          mov esi, ecx 
 +  f000:​03e9 ​     66f7de ​          neg esi 
 +  f000:​03ec ​     c3               ret 
 +  ;​-------------- 
 + 
 +So, we have jmp to function, which is to near return. This is ROM call convention 
 +(see book from Darmawan Salihun). So, we need fix previous function ​to properly handle ​it. 
 +We are placing **0xb46** to **sp** before jump. This mean, that code at f000:​0b46 ​should ​be word data: 
 + 
 +  f000:​0b46 ​     48               dec ax 
 +  f000:​0b47 ​     0b6681 ​          or sp, [bp-0x7f] 
 +  f000:​0b4a ​     ee               out dx, al 
 + 
 +**48 0b** - here our word. This mean, that rest of code completely wrong. Lets fix that. 
 +  [f000:​0b3c]>​ Cd 2 @ f000:0b46 
 + 
 +... [some reversing process]... 
 + 
 +=== SMBus === 
 + 
 +First, find SMB_BASE addr (see 14.1.8 from ICH5 pdf), it is 0x400 for our mainboard. Then find SMBus registers themselves:​ 
 + 
 +  SMB_BASE + 0x1 - HST_STS (Host Status) 
 +  SMB_BASE + 0x2 - HST_CNT (Host Control) 
 +  SMB_BASE + 0x3 - HST_CMD (Host Command) 
 +  SMB_BASE + 0x4 - XMIT_SLVA (Transmit Slave Address) 
 +  SMB_BASE + 0x5 - HST_D0 (Host Data 0) 
 +  SMB_BASE + 0x6 - HST_D1 (Host Data 1) 
 +  SMB_BASE + 0x7 - HOST_BLOCK_DB (Host Block Data Byte) 
 +  ​... 
 + 
 +SMBus reading/​writing. So, we've found some SMBus function, and we know, that 0x5786 ​- offset of **SMBus_ICH5_Reg_Write_Byte_SL** function, and 0x578e ​- offset of **SMBus_ICH5_Reg_Read_Byte_SL** function. 
 + 
 +  [f000:​574d]>​ pd 24 
 +            f000:​574d ​     b8d304 ​          mov ax, 0x4d3 
 +            f000:​5750 ​     bf5557 ​          mov di, 0x5755 
 +        ,=< f000:​5753 ​     eb31             jmp 0x5786 
 +        |   ​f000:​5755 ​     66c1c008 ​        rol eax, 0x8 
 +        |   ​f000:​5759 ​     0c80             or al, 0x80 
 +        |   ​f000:​575b ​     b403             mov ah, 0x3 
 +        |   ​f000:​575d ​     bf6257 ​          mov di, 0x5762 
 +       ,​==<​ f000:​5760 ​     eb24             jmp 0x5786 
 +       ​|| ​  ​f000:​5762 ​     b84802 ​          mov ax, 0x248 
 +       ​|| ​  ​f000:​5765 ​     bf6a57 ​          mov di, 0x576a 
 +      ,===< f000:​5768 ​     eb1c             jmp 0x5786 
 +      |||   ​f000:​576a ​     b93075 ​          mov cx, 0x7530 
 +      |||   ​f000:​576d ​     e6ed             out 0xed, al 
 +      |||   ​f000:​576f ​     e2fc             loop 0x576d 
 +      |||   ​f000:​5771 ​     b8ff00 ​          mov ax, 0xff 
 +      |||   ​f000:​5774 ​     bf7957 ​          mov di, 0x5779 
 +     ,​====<​ f000:​5777 ​     eb0d             jmp 0x5786 
 +     ​|||| ​  ​f000:​5779 ​     b405             mov ah, 0x5 
 +     ​|||| ​  ​f000:​577b ​     bf8057 ​          mov di, 0x5780 
 +     ​|||| ​  ​f000:​577e ​     eb0e             jmp 0x578e 
 +     ​|||| ​  ​f000:​5780 ​     660fcf ​          bswap edi 
 +     ​|||| ​  ​f000:​5783 ​     f8               clc 
 +     ​|||| ​  ​f000:​5784 ​     ffe7             jmp di 
 +     ​|||| ​  ; ​-------- SMBus_ICH5_Reg_Write_Byte_SL:​ 
 +     ​````->​ f000:​5786 ​     ba0004 ​          mov dx, 0x400 
 + 
 +Add these functions:​ 
 +  [f000:​574d]>​ af+ f000:5786 8 SMBus_ICH5_Reg_Write_Byte_SL 
 +  [f000:​574d]>​ af+ f000:578e 8 SMBus_ICH5_Reg_Read_Byte_SL 
 +where 8 - size of both functions in bytes. "​_SL"​ prefix means "​stackless"​ (just my internal notation). 
 + 
 +Lets add more metainfo, comments ​and so on: 
 + 
 +  [f000:​574d]>​ "CCa f000:5786 void SMBus_ICH5_Reg_Write_Byte_SL(uint8_t reg<​ah>,​ uint8_t value<​al>​);"​ 
 +  [f000:​574d]>​ "CCa f000:578e uint8_t SMBus_ICH5_Reg_Read_Byte_SL<​al>​(uint8_t reg<​ah>​);"​ 
 + 
 +Note, that you should quote **whole** r2 command ​to mask special symbols **';'​**,​ **'>'​** and **'<'​**. 
 +Then add few comments: 
 +  ​[f000:​574d]>​ "CCa 0xf000:​0x574d value = 0xD3; reg = 0x4; // XMIT_SLVA - Transmit Slave Address"​ 
 +  ​[f000:574d]> "CCa 0xf000:​0x575b reg = 0x3; // HST_CMD - Host Command"​ 
 +  [f000:​574d]>​ "CCa 0xf000:​0x5762 value = 0x48; reg = 0x2; // HST_CNT - Host Control"​ 
 +   
 +Also add these local labels: 
 +  [f000:​574d]>​ f .SMB_Send_CMD @ 0xf000:​0x5755 
 +  [f000:​574d]>​ f .SMB_Prepare_Controller @ 0xf000:​0x5762 
 +  [f000:574d]> f .SMB_Read_Data @ 0xf000:​0x5779 
 +  [f000:574d]> f .SMB_delay_loop @ 0xf000:​0x576d 
 +   
 +And here is what we have got (in VISUAL mode - **Vp** command to enter): 
 + 
 +  [0x000f574d 255 asrock_p4i65g.bin]> pd $h                                                                                                                                  
 +    ;              ; value = 0xD3; reg = 0x4; // XMIT_SLVA - Transmit Slave Address ​                                                                                         
 +              f000:​574d ​     b8d304 ​          mov ax, 0x4d3                                                                                                                  
 +              f000:​5750 ​     bf5557 ​          mov di, 0x5755 ​                                                                                                                
 +          ,=< f000:​5753 ​     eb31             jmp 0x5786 ​                                                                                                                    
 +          |   ; -------- SMB_Send_CMD: ​                                                                                                                                      
 +          |   ​f000:​5755 ​     66c1c008 ​        rol eax, 0x8                                                                                                                   
 +          |   ​f000:​5759 ​     0c80             or al, 0x80                                                                                                                    
 +    ;              ; value = 0x3; // HST_CMD - Host Command ​                                                                                                                 
 +          |   ​f000:​575b ​     b403             mov ah, 0x3                                                                                                                    
 +          |   ​f000:​575d ​     bf6257 ​          mov di, 0x5762 ​                                                                                                                
 +         ,​==<​ f000:​5760 ​     eb24             jmp 0x5786 ​                                                                                                                    
 +    ;              ; value = 0x48; reg = 0x2; // HST_CNT - Host Control ​                                                                                                     
 +         ​|| ​  ; -------- SMB_Prepare_Controller: ​                                                                                                                            
 +         ​|| ​  ​f000:​5762 ​     b84802 ​          mov ax, 0x248                                                                                                                  
 +         ​|| ​  ​f000:​5765 ​     bf6a57 ​          mov di, 0x576a ​                                                                                                                
 +        ,===< f000:​5768 ​     eb1c             jmp 0x5786 ​                                                                                                                    
 +        |||   ​f000:​576a ​     b93075 ​          mov cx, 0x7530 ​                                                                                                                
 +        |||   ; -------- SMB_delay_loop: ​                                                                                                                                    
 +        |||   ​f000:​576d ​     e6ed             out 0xed, al                                                                                                                   
 +        |||   ​f000:​576f ​     e2fc             loop 0x576d ​                                                                                                                   
 +        |||   ​f000:​5771 ​     b8ff00 ​          mov ax, 0xff                                                                                                                   
 +        |||   ​f000:​5774 ​     bf7957 ​          mov di, 0x5779 ​                                                                                                                
 +       ,​====<​ f000:​5777 ​     eb0d             jmp 0x5786 ​                                                                                                                    
 +       ​|||| ​  ; -------- SMB_Read_Data: ​                                                                                                                                     
 +       ​|||| ​  ​f000:​5779 ​     b405             mov ah, 0x5                                                                                                                    
 +       ​|||| ​  ​f000:​577b ​     bf8057 ​          mov di, 0x5780 ​                                                                                                                
 +      ,=====< f000:​577e ​     eb0e             jmp 0x578e ​                                                                                                                    
 +      |||||   ​f000:​5780 ​     660fcf ​          bswap edi                                                                                                                      
 +      |||||   ​f000:​5783 ​     f8               ​clc ​                                                                                                                           
 +      |||||   ​f000:​5784 ​     ffe7             jmp di                                                                                                                         
 +    ;              ; void SMBus_ICH5_Reg_Write_Byte_SL(uint8_t reg<​ah>,​ uint8_t value<​al>​); ​                                                                                            
 +  / function: SMBus_ICH5_Reg_Write_Byte_SL (8)                                                                                                                                          
 +  |   ​|````->​ f000:​5786 ​     ba0004 ​          mov dx, 0x400                                                                                                                  
 +  |   ​| ​      ​f000:​5789 ​     8ad4             mov dl, ah                                                                                                                     
 +  |   ​| ​      ​f000:​578b ​     ee               out dx, al                                                                                                                     
 +  \   ​| ​      ​f000:​578c ​     ffe7             jmp di                                                                                                                         
 +    ;              ; uint8_t SMBus_ICH5_Reg_Read_Byte_SL<​al>​(uint8_t reg<​ah>​); ​                                                                                                         
 +  / function: SMBus_ICH5_Reg_Read_Byte_SL (8)                                                                                                                                           
 +  |   ​`----->​ f000:​578e ​     ba0004 ​          mov dx, 0x400                                                                                                                  
 +  |           ​f000:​5791 ​     8ad4             mov dl, ah                                                                                                                     
 +  |           ​f000:​5793 ​     ec               in al, dx                                                                                                                      
 +  \           ​f000:​5794 ​     ffe7             jmp di                                                                                                                         
 +     ,​======<​ f000:​5796 ​     7426             jz 0x57be ​                                                                                                                     
 +     ​| ​       f000:​5798 ​     b87000 ​          mov ax, 0x70                                                                                                                   
 +     ​| ​       f000:​579b ​     90               ​nop ​                                                                                                                           
 +     ​| ​       f000:​579c ​     bca257 ​          mov sp, 0x57a2 ​                                                                                                                
 +     ​| ​       f000:​579f ​     e9b9f2 ​          jmp 0x4a5b ​                                                                                                                    
 +     ​| ​       f000:​57a2 ​     a4               ​movsb ​                                                                                                                         
 +     ​| ​       f000:​57a3 ​     57               push di                                                                                                                        
 +     ​| ​       f000:​57a4 ​     b87200 ​          mov ax, 0x72       
 + 
 +==== Award ==== 
 + 
 +==== Phoenix ==== 
 + 
 +                                                                                                             
 + 
 +==== HP BIOS ==== 
 + 
 +See example here http://​xvilka.me/hp_bios.bin 
 + 
 +1. Disassembly,​ set flag to this as bios_entry 
 + 
 +Note, that instead of long jump HP bioses widely using short jumps, so you should add **0xf000:** prefix in these jumps. 
 + 
 +  [f000:​fff0]>​ pd 1; f entry = 0xfff0 
 +  [f000:​fff0]>​ f entry_j 1 0xf000:<​addr>​ 
 +where <​addr>​ shown in previous command 
 +or just run 
 +  [f000:​fff0]>​ f entry_j 1 0f000:`pi 1~[2]` 
 +which take addr from that jump automatically 
 + 
 +==== UEFI ==== 
 + 
 +=== Phoenix === 
 + 
 +See example here http://​xvilka.me/​phx_uefi.bin 
 + 
 +1. Open bios file with radare2 using this command: 
 +  r2 -e asm.bits=32 -e io.va=true phx_uefi.bin 
 +You should choose valid asm.bits value due to arch of image. 
 + 
 +2. Do bootblock segment relocation:​ 
 +  [0x00000000]>​ S $s-0x10000 0xf000:​0x0000 0x10000 0x10000 bootblk rwx 
 +where '​$s'​ - variable, file size (see output of '???'​ command) 
 + 
 +Then set this as 16bit segment 
 +  [0x00000000]>​ Sa x86 16 @ 0xf000:​0x0000 
 +You can check result ​by typing just '​S'​ command. 
 + 
 +You can also set DOS-like addressing notation: 
 +  [0x00000000]>​ e asm.segoff=true 
 +  [0000:​0000]>​ 
 + 
 +3. go to 0xf000:​0xfff0,​ where BIOS starts 
 +  [0000:​0000]>​ s 0xf000:​0xfff0 
 + 
 +You can seek also by **s section.bootblk+0xfff0** 
 +Also you can add flags base too: 
 +  ​[0000:0000]> fb section.bootblk 
 + 
 +4. Disassembly,​ set flag to this as bios_entry 
 + 
 +  [f000:​fff0]>​ pd 1; f entry = 0xfff0 
 +  f000:​fff0 ​     e908ff ​      jmp word 0xfefb 
 + 
 +  [f000:fff0]> f entry_j 1 <​addr>​ 
 +where <​addr>​ shown in previous command 
 +or just run 
 +  [f000:fff0]> f entry_j 1 0xf000:`pi 1~[2]` 
 +which take addr from that jump automatically 
 + 
 +5. Go to **entry_j** 
 + 
 +  [f000:​fff0]>​ s entry_j; pd 1 
 +  ; -------- entry_j: 
 +            f000:​fefb ​     e913fd ​      jmp word 0xfc11 
 +Call it '​boot'​ for example: 
 +  [f000:​fefb]>​ f boot 1 0xf000:​fc11 
 +Then go to this addr **s boot** ​and do disassembly:​ 
 +  [f000:​fc11]>​ s boot; pd 
 +          ; -------- boot: 
 +          0x000ffc11 ​     66b801000000 ​    mov eax, 0x1 
 +          0x000ffc17 ​     0fa2             ​cpuid 
 +          0x000ffc19 ​     660fbaea1a ​      bts edx, 0x1a 
 +      ​,=< 0x000ffc1e ​     7309             jae 0xffc29 
 +      |   ​0x000ffc20 ​     0f20e0 ​          mov eax, cr4 
 +      |   ​0x000ffc23 ​     80cc02 ​          or ah, 0x2 
 +      |   ​0x000ffc26 ​     0f22e0 ​          mov cr4, eax 
 +      `-> 0x000ffc29 ​     6633c0 ​          xor eax, eax 
 +          0x000ffc2c ​     fec0             inc al 
 +          0x000ffc2e ​     0fa2             ​cpuid 
 +          0x000ffc30 ​     6625f00fff0f ​    and eax, 0xfff0ff0 
 +          0x000ffc36 ​     663d70060100 ​    cmp eax, 0x10670 
 +     ,​==<​ 0x000ffc3c ​     7408             jz 0xffc46 
 +     ​| ​   0x000ffc3e ​     3df006 ​          cmp ax, 0x6f0 
 +    ,===< 0x000ffc41 ​     7403             jz 0xffc46 
 +    ||    0x000ffc43 ​     e9b802 ​          jmp word 0xfefe 
 +    ``--> 0x000ffc46 ​     b060             mov al, 0x60 
 +          0x000ffc48 ​     ba7000 ​          mov dx, 0x70 
 +          0x000ffc4b ​     ee               out dx, al 
 +          0x000ffc4c ​     e6ed             out 0xed, al 
 +          0x000ffc4e ​     ba7100 ​          mov dx, 0x71 
 +          0x000ffc51 ​     ec               in al, dx 
 +          0x000ffc52 ​     0fbae800 ​        bts ax, 0x0 
 +          0x000ffc56 ​     0f82a402 ​        jb word 0xfefe 
 +          0x000ffc5a ​     66b9ee000000 ​    mov ecx, 0xee 
 +          0x000ffc60 ​     0f32             ​rdmsr 
 +          0x000ffc62 ​     0fbae802 ​        bts ax, 0x2 
 +          0x000ffc66 ​     0f30             ​wrmsr 
 +          0x000ffc68 ​     e99302 ​          jmp word 0xfefe 
 +Here we're checking for CPU family and features 
 +          0x000ffc6b ​     66b801000000 ​    mov eax, 0x1 
 +          0x000ffc71 ​     0fa2             ​cpuid 
 +          0x000ffc73 ​     668bc8 ​          mov ecx, eax 
 +          0x000ffc76 ​     67268b46ec ​      mov ax, [es:esi-0x14] 
 +          0x000ffc7b ​     83e818 ​          sub ax, 0x18 
 +          0x000ffc7e ​     bb0008 ​          mov bx, 0x800 
 +          0x000ffc81 ​     33d2             xor dx, dx 
 +          0x000ffc83 ​     f7f3             div bx 
 +          0x000ffc85 ​     668bd1 ​          mov edx, ecx 
 +          0x000ffc88 ​     8bc8             mov cx, ax 
 +          0x000ffc8a ​     67662639560c ​    cmp [es:​esi+0xc],​ edx 
 +      ,=< 0x000ffc90 ​     7514             jnz 0xffca6 
 +      |   ​0x000ffc92 ​     66b979000000 ​    mov ecx, 0x79 
 +      |   ​0x000ffc98 ​     668bc6 ​          mov eax, esi 
 +      |   ​0x000ffc9b ​     6683c030 ​        add eax, 0x30 
 +      |   ​0x000ffc9f ​     6633d2 ​          xor edx, edx 
 +      |   ​0x000ffca2 ​     0f30             ​wrmsr 
 +     ,​==<​ 0x000ffca4 ​     eb09             jmp 0xffcaf 
 +     |`-> 0x000ffca6 ​     6681c600080000 ​  add esi, 0x800 
 +     ​| ​   0x000ffcad ​     e2db             loop 0xffc8a 
 +     ​`-->​ 0x000ffcaf ​     66b9a0010000 ​    mov ecx, 0x1a0 
 +          0x000ffcb5 ​     0f32             ​rdmsr 
 +          0x000ffcb7 ​     6683e0fe ​        and eax, 0xfffffffe 
 +          0x000ffcbb ​     0f30             ​wrmsr 
 +          0x000ffcbd ​     e97702 ​          jmp word 0xff37 
 +          0x000ffcc0 ​     66b801000000 ​    mov eax, 0x1 
 +          0x000ffcc6 ​     0fa2             ​cpuid 
 +          0x000ffcc8 ​     80e40f ​          and ah, 0xf 
 +          0x000ffccb ​     80fc0f ​          cmp ah, 0xf 
 +          0x000ffcce ​     7504             jnz 0xffcd4 
 +      ,=< 0x000ffcd0 ​     eb13             jmp 0xffce5 
 +      |   ​0x000ffcd2 ​     eb0e             jmp 0xffce2 
 +      |   ​0x000ffcd4 ​     80fc06 ​          cmp ah, 0x6 
 +     ,​==<​ 0x000ffcd7 ​     7505             jnz 0xffcde 
 +     ​|| ​  ​0x000ffcd9 ​     e9bc00 ​          jmp word 0xfd98 
 + 
 +=== AMI (Aptio) === 
 + 
 +=== Insyde ===
start.1389168670.txt.gz · Last modified: 2014/01/08 08:11 by archerhatmaker