From 7c1c3a07a8fa596b48cbbd35302792d3f8fa7286 Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Fri, 3 Nov 2006 15:19:15 +0000 Subject: [PATCH] fixed wrong COFF size calculations in load_driver and load_library git-svn-id: svn://kolibrios.org@206 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/const.inc | 1 + kernel/trunk/core/dll.inc | 14 ++++++++------ kernel/trunk/core/heap.inc | 8 ++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/kernel/trunk/const.inc b/kernel/trunk/const.inc index 02f6c34296..01887f5829 100644 --- a/kernel/trunk/const.inc +++ b/kernel/trunk/const.inc @@ -403,6 +403,7 @@ struc COFF_SECTION .NumLinenum dw ? .Characteristics dd ? } +COFF_SECTION_SIZE equ 40 struc COFF_RELOC { .VirtualAddress dd ? diff --git a/kernel/trunk/core/dll.inc b/kernel/trunk/core/dll.inc index 0b269ac736..7a49136b32 100644 --- a/kernel/trunk/core/dll.inc +++ b/kernel/trunk/core/dll.inc @@ -523,6 +523,8 @@ proc load_file stdcall, file_name:dword test eax, eax jnz .fail + mov eax, [file_size] + stdcall kernel_alloc, [file_size] mov [file], eax @@ -674,7 +676,7 @@ proc fix_coff_relocs stdcall, coff:dword, sec:dword, sym:dword dec ecx jnz .next_reloc .next: - add [sec], 40 + add [sec], COFF_SECTION_SIZE dec [n_sec] jnz .fix_sec .exit: @@ -709,7 +711,7 @@ proc load_driver stdcall, file_name:dword add ebx, [edx+CFS.SizeOfRawData] add ebx, 15 and ebx, not 15 - add edx, 18 + add edx, COFF_SECTION_SIZE dec ecx jnz @B mov [img_size], ebx @@ -747,7 +749,7 @@ proc load_driver stdcall, file_name:dword .next: add edi, 15 and edi, not 15 - add eax, 40 + add eax, COFF_SECTION_SIZE dec ebx jnz @B @@ -835,7 +837,7 @@ proc load_library stdcall, file_name:dword add ebx, [edx+CFS.SizeOfRawData] add ebx, 15 and ebx, not 15 - add edx, 18 + add edx, COFF_SECTION_SIZE dec ecx jnz @B mov [img_size], ebx @@ -867,7 +869,7 @@ proc load_library stdcall, file_name:dword .next: add edi, 15-new_app_base and edi, not 15 - add eax, 40 + add eax, COFF_SECTION_SIZE dec ebx jnz @B @@ -894,7 +896,7 @@ proc load_library stdcall, file_name:dword lea eax, [edx+20] @@: add [eax+CFS.VirtualAddress], edi ;patch user space offset - add eax, 40 + add eax, COFF_SECTION_SIZE dec ebx jnz @B diff --git a/kernel/trunk/core/heap.inc b/kernel/trunk/core/heap.inc index 0694026e2c..f69b6b7716 100644 --- a/kernel/trunk/core/heap.inc +++ b/kernel/trunk/core/heap.inc @@ -257,8 +257,8 @@ proc alloc_kernel_space stdcall, size:dword cli mov eax, [size] - add eax, 0xFFF - and eax, 0xFFFFF000; + add eax, 4095 + and eax, not 4095 mov [size], eax cmp eax, [heap_free] ja .error @@ -499,8 +499,8 @@ proc kernel_alloc stdcall, size:dword endl mov eax, [size] - add eax, 0xFFF - and eax, 0xFFFFF000; + add eax, 4095 + and eax, not 4095; mov [size], eax and eax, eax jz .error