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

 

Posted by Oleksandr Golovatyi on

Як прибрати символи-дублікати з С-рядка

Без використання додаткової пам’яті

Починаючи з другого символу для кожного з них перевіряємо чи є такий символ в перевіреному вже рядку. Спочатку в перевіреному рядку лише 1 символ який гарантовано є унікальним.

1 void removeDuplicates(char *str) 2 { 3 int len = strlen(str); 4 if (len < 2) return; 5 6 int tail = 1; 7 for (int i = 1; i < len; ++i) 8 { 9 for (int j = 0; j < tail; ++j) 10 { 11 if (str[i] == str[j]) break; 12 } 13 14 if (j == tail) 15 { 16 str[tail++] = str[i]; 17 } 18 } 19 20 str[tail] = 0; 21 }

З використанням додаткової пам’яті

Просто підраховуємо кількість входжень кожного символу в рядок.

1 void removeDuplicates(char *str) 2 { 3 int len = strlen(str); 4 if (len < 2) return; 5 6 bool hit[256] = { false }; 7 hit[str[0]] = true; 8 9 int tail = 1; 10 for (int i = 1; i < len; ++i) 11 { 12 if (!hit[str[i]]) 13 { 14 hit[str[i]] = true; 15 str[tail++] = str[i]; 16 } 17 } 18 19 str[tail] = 0; 20 }