3741|7

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WM6.1 下动态库加载不上与coredll有关问题 [复制链接]

动态加载库,在WM6.0下是完全没有问题的  是在多普达上做的一系列测试
现在换成WM6.1(同样是多普达手机) 就加载不上,出现以下问题
Data Abort: Thread=840d40a8 Proc=804e88f0 'TestFor.exe'
AKY=00800001 PC=8003bf78(NK.EXE+0x0003bf78) RA=00000238(???+0x00000238) BVA=78eba000 FSR=00000007

测试代码:
TestFor.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
  FILE *fp= fopen("t.txt","w");

  HINSTANCE hsdl = LoadLibrary( _T("cygavutil-49.dll")); // cygavutil-49.dll  要加载的库
  if(hsdl == 0)
    fprintf(fp,"%s\n","failed!");
  return 0;
}

现状PS:有的库能加载有的库不能加载,
很简单的思路就是用PE分析工具分析了一下能加载的库和不能加载的库的区别:下面我贴一下我分析的两个你能加载的库和不能加载的库的分析结果
SDL.dll(能加载,但是编译环境未知)
File Type: DLL
FILE HEADER VALUES       
             1C2 machine (Unknown)
               5 number of sections
        48294911 time date stamp Tue May 13 00:53:53 2008
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2102 characteristics  
                   Executable
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic #
            8.00 linker version
           2E200 size of code
            B200 size of initialized data
               0 size of uninitialized data
           2ED20 RVA of entry point
            1000 base of code
           30000 base of data
          100000 image base
            1000 section alignment
             200 file alignment
            4.00 operating system version
            0.00 image version
            4.10 subsystem version
               0 Win32 version
           3D000 size of image
             400 size of headers
               0 checksum
               9 subsystem (Windows CE GUI)
               0 DLL characteristics
           10000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
           347E0 [    13DB] RVA [size] of Export Directory
           344B8 [      3C] RVA [size] of Import Directory
               0 [       0] RVA [size] of Resource Directory
                               ........
           36000 [     290] RVA [size] of Import Address Table Directory
               0 [       0] RVA [size] of Delay Import Directory
                ........

SECTION HEADER #1
   .text name
   2E02C virtual size
    1000 virtual address
   2E200 size of raw data
     400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

SECTION HEADER #2
.rdata name    5BBB virtual size//输入输出表都放在了这里   30000 virtual address
    5C00 size of raw data
   2E600 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only

  Section contains the following exports for SDL.dll

           0 characteristics
    4829490B time date stamp Tue May 13 00:53:47 2008
        0.00 version
           1 ordinal base
         196 number of functions
         196 number of names

    ordinal hint RVA      name

          1    0 00028804 SDL_AddTimer
          2    1 000234A4 SDL_AllocRW
          3    2 00001790 SDL_AudioDriverName
          4    3 00001638 SDL_AudioInit
                    ………
        191   BE 00023E74 SDL_strdup
        192   BF 00023E00 SDL_strlcat
        193   C0 00023DB0 SDL_strlcpy
        194   C1 000240E8 SDL_strtoull
        195   C2 00023FF0 SDL_ulltoa
        196   C3 00024494 SDL_vsnprintf

  Section contains the following imports:

    COREDLL.dll  //以序号的方式访问

                136000 Import Address Table
                1344F4 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                      Ordinal  1410
                      Ordinal   387
                      Ordinal   553
                      Ordinal   384
                      Ordinal   383
                      Ordinal   859
                      Ordinal   264                  
                         ……….                     
                      Ordinal  2025
                      Ordinal  2029
                      Ordinal  2024
                      Ordinal  1043

    MMTimer.dll //另外引入的dll                13627C Import Address Table
                134770 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                   6  timeKillEvent
                   1  timeEndPeriod
                   7  timeSetEvent
                   0  timeBeginPeriod

SECTION HEADER #3
   .data name
    2F40 virtual size
   36000 virtual address
     600 size of raw data
   34200 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         Read Write

SECTION HEADER #4
  .pdata name
    1028 virtual size
   39000 virtual address
    1200 size of raw data
   34800 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only


SECTION HEADER #5
  .reloc name
    12BC virtual size
   3B000 virtual address
    1400 size of raw data
   35A00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
42000040 flags
         Initialized Data
         Discardable
         Read Only

BASE RELOCATIONS #5
    1000 RVA,       6C SizeOfBlock
      F0 HIGHLOW
      F4 HIGHLOW
      F8 HIGHLOW
      FC HIGHLOW
      。。。。。。。  

  Summary

        3000 .data
        2000 .pdata
        6000 .rdata  这里只有.rdata,也就是说将.idata和.edata都结合到rdata里面了。这个是怎么做到的?是和编译器有关吗  
        2000 .reloc
        2F000 .text

最新回复

谢谢啦  赶紧去看啦^^  详情 回复 发表于 2009-1-8 09:41
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
DLL.dll(能加载,编译环境已知是vs)Dump of file Dll.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
             1C2 machine (Unknown)
               5 number of sections
        4945C8DB time date stamp Sun Dec 14 19:02:51 2008
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2102 characteristics
                   Executable
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic #
            8.00 linker version
             A00 size of code
            1C00 size of initialized data
               0 size of uninitialized data
            1604 RVA of entry point
            1000 base of code
            2000 base of data
        10000000 image base
            1000 section alignment
             200 file alignment
            4.00 operating system version
            0.00 image version
            5.01 subsystem version
               0 Win32 version
            7000 size of image
             400 size of headers
               0 checksum
               9 subsystem (Windows CE GUI)
               0 DLL characteristics
          100000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
            2060 [      72] RVA [size] of Export Directory
            201C [      28] RVA [size] of Import Directory
                        .......
            3000 [       8] RVA [size] of Import Address Table Directory
               0 [       0] RVA [size] of Delay Import Directory
               

SECTION HEADER #1
   .text name
     8F0 virtual size
    1000 virtual address
     A00 size of raw data
     400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

SECTION HEADER #2
.rdata name     141 virtual size
    2000 virtual address
     200 size of raw data
     E00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only

  Debug Directories

    Type       Size      RVA  Pointer
    ------ -------- -------- --------
    cv           6D 000020D4      ED4    Format: RSDS

  Section contains the following exports for Dll.dll           0 characteristics
    4945C8DB time date stamp Sun Dec 14 19:02:51 2008
        0.00 version
           1 ordinal base
           3 number of functions
           3 number of names

    ordinal hint RVA      name

          1    0 00001494 av_crc
          2    1 00001398 av_crc_get_table
          3    2 00001024 av_crc_init

  Section contains the following imports:

    COREDLL.dll //以序数调用
              10003000 Import Address Table
              10002044 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                      Ordinal    36  
SECTION HEADER #3
   .data name
    1474 virtual size
    3000 virtual address
     200 size of raw data
    1000 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         Read Write

SECTION HEADER #4
  .pdata name
      70 virtual size
    5000 virtual address
     200 size of raw data
    1200 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only

Function Table (5)

           Begin    End      Excptn   ExcpDat  Prolog   Type        Fixups Function Name

  00000000 10001000 40000904 10001024 4000C204 1000132C Primary     YNYNY
   .......................
  00000050 10001848 40000601 10001860 40000601 10001878 Primary     YNYNY

SECTION HEADER #5
  .reloc name
      72 virtual size
    6000 virtual address
     200 size of raw data
    1400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
42000040 flags
         Initialized Data
         Discardable
         Read Only

BASE RELOCATIONS #5
    1000 RVA,       2C SizeOfBlock
     48C HIGHLOW
     490 HIGHLOW
     698 HIGHLOW
     734 HIGHLOW
     738 HIGHLOW
     73C HIGHLOW
     ........
  Summary

        2000 .data
        1000 .pdata
       1000 .rdata        1000 .reloc //和sdl.dll的情况相同
        1000 .text
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
cygaXXXXX.dll(编译环境已知(cegcc5.0),不能加载)

PE signature found
File Type: DLL
FILE HEADER VALUES
             1C0 machine (ARM)
              10 number of sections
        48F82D10 time date stamp Thu Oct 16 23:13:36 2008
            FC00 file pointer to symbol table
             644 number of symbols
              E0 size of optional header
            2106 characteristics
                   Executable
                   Line numbers stripped
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic #
            2.56 linker version
            6400 size of code
            1800 size of initialized data
            2000 size of uninitialized data
            1000 RVA of entry point
            1000 base of code
            8000 base of data
        6B200000 image base
            1000 section alignment
             200 file alignment
            4.00 operating system version
            1.00 image version
            3.00 subsystem version
               0 Win32 version
           1C000 size of image
             600 size of headers
           1DF7F checksum
               9 subsystem (Windows CE GUI)
               0 DLL characteristics
          200000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
            C000 [     71B] RVA [size] of Export Directory
            D000 [     230] RVA [size] of Import Directory
               ...........

SECTION HEADER #1
   .text name
    6288 virtual size
    1000 virtual address
    6400 size of raw data
     600 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

SECTION HEADER #2
   .data name
      10 virtual size
    8000 virtual address
     200 size of raw data
    6A00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         Read Write

SECTION HEADER #3
  .rdata name
     724 virtual size
    9000 virtual address
     800 size of raw data
    6C00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only

SECTION HEADER #4
    .bss name
    1E24 virtual size
    A000 virtual address
       0 size of raw data
       0 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000080 flags
         Uninitialized Data
         Read Write

SECTION HEADER #5
.edata name     71B virtual size
    C000 virtual address
     800 size of raw data
    7400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only


Section contains the following exports for cygavutil-49.dll
           0 characteristics
    48F82D10 time date stamp Thu Oct 16 23:13:36 2008
        0.00 version
           1 ordinal base
          76 number of functions
          76 number of names

    ordinal hint RVA      name

           .......         
SECTION HEADER #6
  .idata name     230 virtual size
    D000 virtual address
     400 size of raw data
    7C00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         Read Write

  Section contains the following imports:

    COREDLL //通过函数名调用

              6B20D084 Import Address Table
              6B20D02C Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                 104  DisableThreadLibraryCalls
                 460  TerminateProcess
                 4F5  _fcloseall
                 501  _getstdfilex
                 530  _vsnprintf
                 576  fflush
                 581  fprintf
                 587  free
                 588  frexp
                 596  ldexp
                 5DA  log
                 5DF  malloc
                 5E3  memcpy
                 5E5  memset
                 610  realloc
                 618  sqrt
                 61D  strchr
                 621  strlen
                 632  toupper
                 637  vfprintf
   Summary

        2000 .bss
        1000 .data
        1000 .debug_abbrev
        1000 .debug_aranges
        1000 .debug_frame
        3000 .debug_info
        2000 .debug_line
        2000 .debug_loc
        1000 .debug_pubnames
        1000 .debug_ranges
        1000 .debug_str
        1000 .edata
        1000 .idata
        1000 .rdata

        1000 .reloc
        7000 .text

问题:
   三个文件中能加载的两个dll的共性是将输出表和输入表都放在了.rdata里面,(但是理论上放到哪个节都无关紧要,重要的是节的属性要一致),这是由编译器和连接 器决定的还是由加载机制决定的?这个能影响动态加载能否成功吗?微软是分开放的,将输出表放在edata里面,输入表放在idata里面

   

 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
既然在WM6.0下是完全没有问题的,就说明这个dll是可用的,那就不是将输入输出表的问题,否则在WM6.0下也用不了
看看是不是内存的问题,WM6.1也是ce5的内核,所有的dll都存在slot1
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
加载dll过大或者过多都可能失败,至于输入输出表放在哪个段是完全没有关系的,导入表由于要重定位,是需要RW的,所以单独放一个RW段更加合理
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 navi_dx 的回复:
既然在WM6.0下是完全没有问题的,就说明这个dll是可用的,那就不是将输入输出表的问题,否则在WM6.0下也用不了
看看是不是内存的问题,WM6.1也是ce5的内核,所有的dll都存在slot1

当执行一个应用程序时,内核将这个应用程序调用的系统DLL加载到Slot 1(0x0200 0000-0x03FF FFFF)。
在Windows CE.NET中Slot 1专用于XIP DLL使用  

应用程序用到的dll也放在这里吗?
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

7
 
应用程序用到的dll放在Slot0 但是所有Dll的空间是共享的,msdn有篇文章是讲这个问题的
http://support.microsoft.com/kb/326163/zh-cn
如果DLL很大,最好把DLL静态连接到EXE
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 navi_dx 的回复:
应用程序用到的dll放在Slot0 但是所有Dll的空间是共享的,msdn有篇文章是讲这个问题的
http://support.microsoft.com/kb/326163/zh-cn
如果DLL很大,最好把DLL静态连接到EXE


谢谢啦  赶紧去看啦^^
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表