Subversion Repositories Kolibri OS

Rev

Rev 4591 | Rev 4890 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4591 Rev 4886
Line 1... Line 1...
1
COLOR_THEME equ BLACK_ON_WHITE
1
COLOR_THEME fix BLACK_ON_WHITE
Line 2... Line 2...
2
 
2
 
3
 
3
 
4
format binary as ""
4
format binary as ""
Line 303... Line 303...
303
    @@:
303
    @@:
304
        mov     dword [ecx], '.dbg'
304
        mov     dword[ecx], '.dbg'
305
        mov     byte [ecx+4], 0
305
        mov     byte[ecx+4], 0
306
        pop     esi
306
        pop     esi
307
        mov     ebp, esi
307
        mov     ebp, esi
-
 
308
        push    ecx esi
-
 
309
        call    OnLoadSymbols.silent            ; Try to load .dbg file
-
 
310
        pop     esi ecx
-
 
311
        xor     eax, eax
-
 
312
        cmp     [num_symbols], eax
-
 
313
        jne     @f
-
 
314
        mov     dword[ecx], '.map'              ; If failed, try .map file too
308
        call    OnLoadSymbols.silent
315
        call    OnLoadSymbols.silent
-
 
316
    @@:
Line 309... Line 317...
309
    
317
 
310
    ; now test for packed progs
318
    ; now test for packed progs
311
        cmp     [disasm_buf_size], 100h
319
        cmp     [disasm_buf_size], 100h
312
        jz      @f
320
        jz      @f
Line 1939... Line 1947...
1939
    .done:
1947
    .done:
1940
        mov     esi, aUnpacked
1948
        mov     esi, aUnpacked
1941
        jmp     .x1
1949
        jmp     .x1
Line 1942... Line 1950...
1942
 
1950
 
1943
;-----------------------------------------------------------------------------
1951
;-----------------------------------------------------------------------------
1944
;                  Working with program symbols
-
 
1945
;
-
 
1946
;  TODO: split to symbols.inc
-
 
1947
 
-
 
1948
include 'sort.inc'
-
 
1949
 
-
 
1950
; compare what? Add context-relative comment and name
-
 
1951
compare:
-
 
1952
        cmpsd
-
 
1953
        jnz     @f
-
 
1954
        cmp     esi, edi
-
 
1955
 
-
 
1956
    @@:
-
 
1957
        ret
-
 
1958
 
-
 
1959
; purpose of this function?
-
 
1960
compare2:
-
 
1961
        cmpsd
-
 
1962
 
-
 
1963
    @@:
-
 
1964
        cmpsb
-
 
1965
        jnz     @f
-
 
1966
        cmp     byte [esi-1], 0
-
 
1967
        jnz     @b
-
 
1968
        cmp     esi, edi
-
 
1969
 
-
 
1970
    @@:
-
 
Line 1971... Line -...
1971
        ret
-
 
1972
 
-
 
1973
free_symbols:
-
 
1974
        mov     ecx, [symbols]
-
 
1975
        jecxz   @f
-
 
1976
        mcall   68, 13
-
 
1977
        and     [symbols], 0
-
 
1978
        and     [num_symbols], 0
-
 
1979
 
-
 
1980
    @@:
-
 
1981
        ret
-
 
1982
;-----------------------------------------------------------------------------
-
 
1983
;                        Load symbols event
-
 
1984
 
-
 
1985
OnLoadSymbols.fileerr:
-
 
1986
        test    ebp, ebp
-
 
1987
        jz      @f
-
 
1988
        mcall   68, 13, edi
-
 
1989
        ret
-
 
1990
 
-
 
1991
    @@:
-
 
1992
        push    eax
-
 
1993
        mcall   68, 13, edi
-
 
1994
        mov     esi, aCannotLoadFile
-
 
1995
        call    put_message_nodraw
-
 
1996
        pop     eax
-
 
1997
        cmp     eax, 0x20
-
 
1998
        jae     .unk
-
 
1999
        mov     esi, [load_err_msgs + eax*4]
-
 
2000
        test    esi, esi
-
 
2001
        jnz     put_message
-
 
2002
 
-
 
2003
    .unk:
-
 
2004
        mov     esi, unk_err_msg2
-
 
2005
        jmp     put_message
-
 
2006
 
-
 
2007
OnLoadSymbols:
-
 
2008
        xor     ebp, ebp
-
 
2009
   ; load input file
-
 
2010
        mov     esi, [curarg]
-
 
2011
        call    free_symbols
-
 
2012
 
-
 
2013
    .silent:
-
 
2014
        xor     edi, edi
-
 
2015
        cmp     [num_symbols], edi
-
 
2016
        jz      @f
-
 
2017
                                             
-
 
2018
        call    free_symbols
-
 
2019
        ;ret                                        
-
 
2020
  
-
 
2021
    @@:
-
 
2022
        mov     ebx, fn70_attr_block
-
 
2023
        mov     [ebx+21], esi
-
 
2024
        mcall   70
-
 
2025
        test    eax, eax
-
 
2026
        jnz     .fileerr
-
 
2027
        cmp     dword [fileattr+36], edi
-
 
2028
        jnz     .memerr
-
 
2029
        mov     ecx, dword [fileattr+32]
-
 
2030
        mcall   68, 12
-
 
2031
        test    eax, eax
-
 
2032
        jz      .memerr
-
 
2033
        mov     edi, eax
-
 
2034
        mov     ebx, fn70_read_block
-
 
2035
        mov     [ebx+12], ecx
-
 
2036
        mov     [ebx+16], edi
-
 
2037
        mov     [ebx+21], esi
-
 
2038
        mcall   70
-
 
2039
        test    eax, eax
-
 
2040
        jnz     .fileerr
-
 
2041
    ; calculate memory requirements
-
 
2042
        lea     edx, [ecx+edi-1]        ; edx = EOF-1
-
 
2043
        mov     esi, edi
-
 
2044
        xor     ecx, ecx
-
 
2045
 
-
 
2046
    .calcloop:
-
 
2047
        cmp     esi, edx
-
 
2048
        jae     .calcdone
-
 
2049
        cmp     word [esi], '0x'
-
 
2050
        jnz     .skipline
-
 
2051
        inc     esi
-
 
2052
        inc     esi
-
 
2053
 
-
 
2054
    @@:
-
 
2055
        cmp     esi, edx
-
 
2056
        jae     .calcdone
-
 
2057
        lodsb
-
 
2058
        or      al, 20h
-
 
2059
        sub     al, '0'
-
 
2060
        cmp     al, 9
-
 
2061
        jbe     @b
-
 
2062
        sub     al, 'a'-'0'-10
-
 
2063
        cmp     al, 15
-
 
2064
        jbe     @b
-
 
2065
        dec     esi
-
 
2066
 
-
 
2067
    @@:
-
 
2068
        cmp     esi, edx
-
 
2069
        ja      .calcdone
-
 
2070
        lodsb
-
 
2071
        cmp     al, 20h
-
 
2072
        jz      @b
-
 
2073
        jb      .calcloop
-
 
2074
        cmp     al, 9
-
 
2075
        jz      @b
-
 
2076
        add     ecx, 12+1
-
 
2077
        inc     [num_symbols]
-
 
2078
 
-
 
2079
    @@:
-
 
2080
        inc     ecx
-
 
2081
        cmp     esi, edx
-
 
2082
        ja      .calcdone
-
 
2083
        lodsb
-
 
2084
        cmp     al, 0xD
-
 
2085
        jz      .calcloop
-
 
2086
        cmp     al, 0xA
-
 
2087
        jz      .calcloop
-
 
2088
        jmp     @b
-
 
2089
 
-
 
2090
    .skipline:
-
 
2091
        cmp     esi, edx
-
 
2092
        jae     .calcdone
-
 
2093
        lodsb
-
 
2094
        cmp     al, 0xD
-
 
2095
        jz      .calcloop
-
 
2096
        cmp     al, 0xA
-
 
2097
        jz      .calcloop
-
 
2098
        jmp     .skipline
-
 
2099
 
-
 
2100
    .calcdone:
-
 
2101
        mcall   68, 12
-
 
2102
        test    eax, eax
-
 
2103
        jnz     .memok
-
 
2104
        inc     ebx
-
 
2105
        mov     ecx, edi
-
 
2106
        mov     al, 68
-
 
2107
        mcall
-
 
2108
 
-
 
2109
    .memerr:
-
 
2110
        mov     esi, aNoMemory
-
 
2111
        jmp     put_message
-
 
2112
 
-
 
2113
    .memok:
-
 
2114
        mov     [symbols], eax
-
 
2115
        mov     ebx, eax
-
 
2116
        push    edi
-
 
2117
        mov     esi, edi
-
 
2118
        mov     edi, [num_symbols]
-
 
2119
        lea     ebp, [eax+edi*4]
-
 
2120
        lea     edi, [eax+edi*8]
-
 
2121
 
-
 
2122
    ; parse input data, 
-
 
2123
    ; esi->input, edx->EOF, ebx->ptrs, edi->names
-
 
2124
    .readloop:
-
 
2125
        cmp     esi, edx
-
 
2126
        jae     .readdone
-
 
2127
        cmp     word [esi], '0x'
-
 
2128
        jnz     .readline
-
 
2129
        inc     esi
-
 
2130
        inc     esi
-
 
2131
        xor     eax, eax
-
 
2132
        xor     ecx, ecx
-
 
2133
 
-
 
2134
    @@:
-
 
2135
        shl     ecx, 4
-
 
2136
        add     ecx, eax
-
 
2137
        cmp     esi, edx
-
 
2138
        jae     .readdone
-
 
2139
        lodsb
-
 
2140
        or      al, 20h
-
 
2141
        sub     al, '0'
-
 
2142
        cmp     al, 9
-
 
2143
        jbe     @b
-
 
2144
        sub     al, 'a'-'0'-10
-
 
2145
        cmp     al, 15
-
 
2146
        jbe     @b
-
 
2147
        dec     esi
-
 
2148
 
-
 
2149
    @@:
-
 
2150
        cmp     esi, edx
-
 
2151
        ja      .readdone
-
 
2152
        lodsb
-
 
2153
        cmp     al, 20h
-
 
2154
        jz      @b
-
 
2155
        jb      .readloop
-
 
2156
        cmp     al, 9
-
 
2157
        jz      @b
-
 
2158
        mov     dword [ebx], edi
-
 
2159
        add     ebx, 4
-
 
2160
        mov     dword [ebp], edi
-
 
2161
        add     ebp, 4
-
 
2162
        mov     dword [edi], ecx
-
 
2163
        add     edi, 4
-
 
2164
        stosb
-
 
2165
 
-
 
2166
    @@:
-
 
2167
        xor     eax, eax
-
 
2168
        stosb
-
 
2169
        cmp     esi, edx
-
 
2170
        ja      .readdone
-
 
2171
        lodsb
-
 
2172
        cmp     al, 0xD
-
 
2173
        jz      .readloop
-
 
2174
        cmp     al, 0xA
-
 
2175
        jz      .readloop
-
 
2176
        mov     byte [edi-1], al
-
 
2177
        jmp     @b
-
 
2178
 
-
 
2179
    .readline:
-
 
2180
        cmp     esi, edx
-
 
2181
        jae     .readdone
-
 
2182
        lodsb
-
 
2183
        cmp     al, 0xD
-
 
2184
        jz      .readloop
-
 
2185
        cmp     al, 0xA
-
 
2186
        jz      .readloop
-
 
2187
        jmp     .readline
-
 
2188
 
-
 
2189
    .readdone:
-
 
2190
        pop     ecx
-
 
2191
        mcall   68, 13
-
 
2192
        mov     ecx, [num_symbols]
-
 
2193
        mov     edx, [symbols]
-
 
2194
        mov     ebx, compare
-
 
2195
        call    sort
-
 
2196
        mov     ecx, [num_symbols]
-
 
2197
        lea     edx, [edx+ecx*4]
-
 
2198
        mov     ebx, compare2
-
 
2199
        call    sort
-
 
2200
        mov     esi, aSymbolsLoaded
-
 
2201
        call    put_message
-
 
2202
        jmp     draw_disasm.redraw
-
 
2203
 
-
 
2204
;-----------------------------------------------------------------------------
-
 
2205
;
-
 
2206
; in: EAX = address
-
 
2207
; out: ESI, CF
-
 
2208
 
-
 
2209
find_symbol:
-
 
2210
        cmp     [num_symbols], 0
-
 
2211
        jnz     @f
-
 
2212
 
-
 
2213
    .ret0:
-
 
2214
        xor     esi, esi
-
 
2215
        stc
-
 
2216
        ret
-
 
2217
 
-
 
2218
    @@:
-
 
2219
        push    ebx ecx edx
-
 
2220
        xor     edx, edx
-
 
2221
        mov     esi, [symbols]
-
 
2222
        mov     ecx, [num_symbols]
-
 
2223
        mov     ebx, [esi]
-
 
2224
        cmp     [ebx], eax
-
 
2225
        jz      .donez
-
 
2226
        jb      @f
-
 
2227
        pop     edx ecx ebx
-
 
2228
        jmp     .ret0
-
 
2229
 
-
 
2230
    @@:
-
 
2231
    ; invariant: symbols_addr[edx] < eax < symbols_addr[ecx]
-
 
2232
    ; TODO: add meaningful label names
-
 
2233
    .0:
-
 
2234
        push    edx
-
 
2235
 
-
 
2236
    .1:
-
 
2237
        add     edx, ecx
-
 
2238
        sar     edx, 1
-
 
2239
        cmp     edx, [esp]
-
 
2240
        jz      .done2
-
 
2241
        mov     ebx, [esi+edx*4]
-
 
2242
        cmp     [ebx], eax
-
 
2243
        jz      .done
-
 
2244
        ja      .2
-
 
2245
        mov     [esp], edx
-
 
2246
        jmp     .1
-
 
2247
 
-
 
2248
    .2:
-
 
2249
        mov     ecx, edx
-
 
2250
        pop     edx
-
 
2251
        jmp     .0
-
 
2252
 
-
 
2253
    .donecont:
-
 
2254
        dec     edx
-
 
2255
 
-
 
2256
    .done:
-
 
2257
        test    edx, edx
-
 
2258
        jz      @f
-
 
2259
        mov     ebx, [esi+edx*4-4]
-
 
2260
        cmp     [ebx], eax
-
 
2261
        jz      .donecont
-
 
2262
 
-
 
2263
    @@:
-
 
2264
        pop     ecx
-
 
2265
 
-
 
2266
    .donez:
-
 
2267
        mov     esi, [esi+edx*4]
-
 
2268
        add     esi, 4
-
 
2269
        pop     edx ecx ebx
-
 
2270
        clc
-
 
2271
        ret
-
 
2272
 
-
 
2273
    .done2:
-
 
2274
        lea     esi, [esi+edx*4]
-
 
2275
        pop     ecx edx ecx ebx
-
 
2276
        stc
-
 
2277
        ret
-
 
2278
 
-
 
2279
;-----------------------------------------------------------------------------
-
 
2280
;
-
 
2281
; in: esi->name
-
 
2282
; out: if found: CF = 0, EAX = value
1952
;                            Include Symbol parser
2283
;      otherwise CF = 1
-
 
2284
find_symbol_name:
-
 
2285
        cmp     [num_symbols], 0
-
 
2286
        jnz     @f
-
 
2287
 
-
 
2288
    .stc_ret:
-
 
2289
        stc
-
 
2290
        ret
-
 
2291
 
-
 
2292
    @@:
-
 
2293
        push    ebx ecx edx edi
-
 
2294
        push    -1
-
 
2295
        pop     edx
-
 
2296
        mov     ebx, [symbols]
-
 
2297
        mov     ecx, [num_symbols]
-
 
2298
        lea     ebx, [ebx+ecx*4]
-
 
2299
    
-
 
2300
    ; invariant: symbols_name[edx] < name < symbols_name[ecx]
-
 
2301
    .0:
-
 
2302
        push    edx
-
 
2303
 
-
 
2304
    .1:
-
 
2305
        add     edx, ecx
-
 
2306
        sar     edx, 1
-
 
2307
        cmp     edx, [esp]
-
 
2308
        jz      .done2
-
 
2309
        call    .cmp
-
 
2310
        jz      .done
-
 
2311
        jb      .2
-
 
2312
        mov     [esp], edx
-
 
2313
        jmp     .1
-
 
2314
 
-
 
2315
    .2:
-
 
2316
        mov     ecx, edx
-
 
2317
        pop     edx
-
 
2318
        jmp     .0
-
 
2319
 
-
 
2320
    .done:
-
 
2321
        pop     ecx
-
 
2322
 
-
 
2323
    .donez:
-
 
2324
        mov     eax, [ebx+edx*4]
-
 
2325
        mov     eax, [eax]
-
 
2326
        pop     edi edx ecx ebx
-
 
2327
        clc
-
 
2328
        ret
-
 
2329
 
-
 
2330
    .done2:
-
 
2331
        pop     edx edi edx ecx ebx
-
 
2332
        stc
-
 
2333
        ret
-
 
2334
 
-
 
2335
    .cmp:
-
 
2336
        mov     edi, [ebx+edx*4]
-
 
2337
        push    esi
-
 
2338
        add     edi, 4
-
 
2339
 
-
 
2340
    @@:
-
 
2341
        cmpsb
-
 
2342
        jnz     @f
-
 
2343
        cmp     byte [esi-1], 0
-
 
2344
        jnz     @b
-
 
2345
 
-
 
2346
    @@:
-
 
Line 2347... Line 1953...
2347
        pop     esi
1953
 
2348
        ret
1954
include 'symbols.inc'
Line 2349... Line 1955...
2349
 
1955
 
Line 2355... Line 1961...
2355
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1961
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2356
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1962
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2357
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1963
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 2358... Line 1964...
2358
 
1964
 
2359
caption_str db 'Kolibri Debugger',0
-
 
Line 2360... Line 1965...
2360
caption_len = $ - caption_str
1965
caption_str db  'Kolibri Debugger',0
2361
 
1966
 
2362
begin_str db    'Kolibri Debugger, version 0.33',10
1967
begin_str db    'Kolibri Debugger, version 0.34',10
2363
        db      'Hint: type "help" for help, "quit" to quit'
1968
        db      'Hint: type "help" for help, "quit" to quit'
Line 2364... Line 1969...
2364
newline db      10,0
1969
newline db      10,0
Line 2690... Line 2295...
2690
        db      'EDI='
2295
        db 'EDI='
2691
        db      'EBP='
2296
        db 'EBP='
2692
        db      'ESP='
2297
        db 'ESP='
2693
        db      'EIP='
2298
        db 'EIP='
2694
        db      'EFLAGS='
2299
        db 'EFLAGS='
-
 
2300
 
2695
fpu_strs:
2301
fpu_strs:
2696
        db        'ST0='
2302
        db 'ST0='
2697
        db        'ST1='
2303
        db 'ST1='
2698
        db        'ST2='
2304
        db 'ST2='
2699
        db        'ST3='
2305
        db 'ST3='
2700
        db        'ST4='
2306
        db 'ST4='
2701
        db        'ST5='
2307
        db 'ST5='
2702
        db        'ST6='
2308
        db 'ST6='
2703
        db        'ST7='
2309
        db 'ST7='
-
 
2310
 
2704
mmx_strs:
2311
mmx_strs:
2705
        db        'MM0='
2312
        db 'MM0='
2706
        db        'MM1='
2313
        db 'MM1='
2707
        db        'MM2='
2314
        db 'MM2='
2708
        db        'MM3='
2315
        db 'MM3='
Line 2811... Line 2418...
2811
curarg          dd      ?
2418
curarg          dd ?
Line 2812... Line 2419...
2812
 
2419
 
Line 2813... Line 2420...
2813
cmdline_prev    rb      cmdline_width+1
2420
cmdline_prev    rb cmdline_width+1
-
 
2421
 
Line 2814... Line 2422...
2814
 
2422
was_temp_break  db ?
2815
was_temp_break  db      ?
2423
symbol_section  db ?
2816
 
2424