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 |