Posted by Oleksandr Golovatyi on

Structured Exception Handling basics

OS provides SEH to deal directly with crashes.

SEH is language independent but is usually implemented in C/C++.

Pair __try/__except allows to set code inside __try and handle exception in __except (http://msdn.microsoft.com/de-de/library/s58ftw19.aspx). Pair __try/__finally ensures that section of code in __finally is always executed even if __try block terminates prematurely (http://msdn.microsoft.com/de-de/library/9xtt5hxz.aspx).

__except is an exception filter for one of 3 values:

Value Meaning
EXCEPTION_EXECUTE_HANDLER The system transfers control to the exception handler, and execution continues in the stack frame in which the handler is found.
EXCEPTION_CONTINUE_SEARCH The system continues to search for a handler.
EXCEPTION_CONTINUE_EXECUTION The system stops its search for a handler and returns control to the point at which the exception occurred. If the exception is noncontinuable, this results in an EXCEPTION_NONCONTINUABLE_EXCEPTION exception.
void f() { __try { __try { // some code } __except (EXCEPTION_EXECUTE_HANDLER) { // process the exception } } __finally { // executed regardless of whether function caused a crash } }

Exception handler can determine exception value with GetExceptionCode function (http://msdn.microsoft.com/en-us/library/ms679356(VS.85).aspx) which can be called only in exception filters.

__try { n = x / y; } __except (EXCEPTION_INT_DIVIDE_BY_ZERO == GetExceptionCode() ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { n = NaN; }

In __except user function can be called. GetExceptionInformation (http://msdn.microsoft.com/en-us/library/ms679357(VS.85).aspx) returns a pointer to structure with exception info.

To generate an exception RaiseException (http://msdn.microsoft.com/en-us/library/ms680552(VS.85).aspx) can be used.

SEH limitations:

  • error codes are limited to unsigned int.
  • doesn’t mix with C++ exceptions.
  • doesn’t call any of object destructors.

Additional reading:

Posted by Oleksandr Golovatyi on

Visual Studio: форматуючі символи для вікна Watch

Formatting Symbols for Watch Window

Symbol

Description

Sample

Displays

d, i

Signed decimal int

(int)0xF000F064,d

-268373915

u

Unsigned decimal int

0x0065,u

101

o

Unsigned octal decimal

0xF065,o

0170145

x, X

Hexidecimal integer

61541,x

0x0000F065

l, h

Long or short prefix for d, I, u, o, x, X

0x0042406042,hx

0x0c22

f

Signed float

3./2,f

1.500000

e

Signed float, scientific notation

3./2,e

1.500000e+00

g

Signed float or signed scientific, which one is shorter

3./2,g

1.5

c

char

0x0065,c

‘e’

s

string

szHiWorlds,z

“Hello world”

su

Unicode string

szWHiWorlds,su

“Hello world”

st

Unicode or ANSI string, dependint on settings in autoext.dat

   

hr

HRESULT or Win32 error code

0,hr

S_OK

wc

Window class flag

0x0040,wc

WC_DEFAULTCHAR

wm

Windows message

0x0010,wm

WM_CLOSE

Posted by Oleksandr Golovatyi on

Pay It Forward (2000)

 

Ідея дуже цікава і весь час чекаєш на розвиток. Але нажаль усе закінчується рожевими шмарклями…

 

І фільм начебто непоганий, і тим не менш після перегляду є якесь розчарування, наче надурили.

http://www.imdb.com/title/tt0223897/

 

 

[youtube=http://www.youtube.com/watch?v=_pCtXRP1edo&w=640&h=385&hd=1]
Posted by Oleksandr Golovatyi on

Г. Л. Олді. Черный Баламут

Твір доволі монументальний, складається з трьох книг – Гроза в Безначалье, Сеть для миродержцев та Иди куда хочешь.

По суті це “переосмислення” Махабхарати, але ніяк не просто переказ. І хоча герої і події ті самі, тим не менше це новий, неочікуваний погляд на мотивацію і причини вчинків і подій.

Всередені (у другій книзі) трошки все якось нудненько підвисло, але під кінець ситуація виправилася і переборювати себе щоб дочитати не довелося Smile

Мабуть головний недолік – великий обсяг, читати у транспорті буде важкувато, або взагалі неможливо.

У подібному ж стилі (але краще і коротше імхо) в авторів написано “Герой должен быть один”.

Posted by Oleksandr Golovatyi on

Megadeth–2004 – The System Has Failed

Фірмовий звук дісторшена Megadeth – м’який і важкий одночасно.

Композиції все ускладнюються, гітаризмів усе менше. Мабуть так впливає створення композицій на комп’ютері.

Для шанувальників команди навіть не питання чи варто слухати (хоча це вже і не thrash).

[youtube=http://www.youtube.com/watch?v=iVqbnFV-wcI&w=480&h=385&hd=1]
Posted by Oleksandr Golovatyi on

WinDbg–корисні команди

Некласифіковані (поки що) команди

Command

Meaning

Exampe

uf

Show function disasembled code

uf main

.asm no_code_bytes

Do not show machine codes in assembler window

Symbols

Command

Variants/Params

Description/Examples

.sympath

.sympath

.sympath+

Display or set symbol search path

Append directories to previous symbol path

.symfix

.symfix

.symfix+ DownstreamStore

Display or set symbol search path

Append directories to previous symbol path

.reload

.reload

.reload [/f | /v]

.reload [/f | /v] Module

Reload symbol information for all modules**

f = force immediate symbol load (overrides lazy loading); v = verbose mode

Module = for Module only

 

**Note: The .reload command does not actually cause symbol information to be read. It just lets the debugger know that the symbol files may have changed, or that a new module should be added to the module list. To force actual symbol loading to occur use the /f option, or the ld (Load Symbols) command.

 

.reload /f @”ntdll.dll”

Immediately reload symbols for ntdll.dll.

.reload /f @”C:WINNTSystem32verifier.dll”

Reload symbols for verifier. Use the given path.

 

Breakpoints

Command

Variants/Params

Description/Examples

bp

bp [Addr]

bp [Addr] [“CmdString”]

 

[~Thrd] bp[#] [Options] [Addr] [Passes] [“CmdString”]

Set breakpoint at address

CmdString = Cmd1; Cmd2; .. Executed every time the BP is hit.

 

~Thrd == thread that the bp applies too.

# = Breakpoint ID

Passes = Activate breakpoint after #Passes (it is ignored before)

 

 

 

 

Memory

Command

Variants/Params

Description/Examples

d*

d[a| u| b| w| W| d| c| q| f| D] [/c #] [Addr]

 

Display memory [#columns to display]

a = ascii chars

u = Unicode chars

b = byte + ascii

w = word (2b)

W = word (2b) + ascii

d = dword (4b)

c = dword (4b) + ascii

q = qword (8b)

f = floating point (single precision – 4b)

D = floating point (double precision – 8b)

dy*

dy[b | d] ..

Display memory [#columns to display]

b = binary + byte

d = binary + dword

d*s

dds [/c #] [Addr]

dqs [/c #] [Addr]

Display words and symbols (memory at Addr is assumed to be a series of addresses in the symbol table)

dds = dwords (4b)

dqs = qwords (8b)

 

Call Stack

Command

Variants/Params

Description/Examples

k

k [n] [f] [L] [#Frames]

kb …

kp …

kP …

kv …

dump stack; n = with frame #; f = distance between adjacent frames; L = omit source lines; number of stack frames to display

first 3 params

all params: param type + name + value

all params formatted (new line)

FPO info, calling convention

 

 

 

 

Register

Command

Variants/Params

Description/Examples

r

r

r Reg1, Reg2

r Reg=Value

 

r Reg:Type

 

 

 

 

 

 

 

 

 

 

 

r Reg:[Num]Type

 

 

~Thread r [Reg:[Num]Type]

Dump all registers

Dump only specified registers (i.e.: r eax, edx)

Value to assign to the register (i.e.: r eax=5, edx=6)

 

Type = data format in which to display the register (i.e.: r eax:uw)

ib = Signed byte

ub = Unsigned byte

iw = Signed word (2b)

uw = Unsigned word (2b)

id = Signed dword (4b)

ud = Unsigned dword (4b)

iq = Signed qword (8b)

uq = Unsigned qword (8b)

f = 32-bit floating-point

d = 64-bit floating-point

 

Num = number of elements to display (i.e.: r eax:1uw)

Default is full register length, thus r eax:uw would display two values as EAX is a 32-bit register.

 

Thread = thread from which the registers are to be read (i.e.: ~1 r eax)

 

 

 

 

Exceptions, events and crash analysis

Command

Variants/Params

Description/Examples

.ecxr

 

displays exception context record (registers) associated with the current exception

 

 

 

 

Sources

Command

Variants/Params

Description/Examples

.srcpath

.srcpath

.srcpath+ DIR

Display or set source search path

Append directory to the searched source path

 

 

 

 

Executable

Command Variants/Params Description/Examples
.exepath .exepath

.exepath+ DIR

Display or set executable search path

Append directory to the searched executable path

Posted by Oleksandr Golovatyi on

WinDbg online resources and documentation

Posted by Oleksandr Golovatyi on

Naked Lunch (1991)

Фільм за відомою книгою письменник-героїнщика Вільяма Бероуза.

Наркотичні переживання, вивернуте світосприйняття, складні сюжетні лінії які розпадаються тисячі друзок і складаються знову у дивної форми фігури.

Стосунки між людьми, і так штучно ускладнені, через призму наркотичної маячні взагалі видаються іншопланетними.

Фільм хороший, але дивитися важкувато, в смислі напружуватися весь час треба щоб не випасти з потягу контексту.

http://www.imdb.com/title/tt0102511/

 

 

https://www.youtube.com/watch?v=TCx4VN2FYpE