ERROR_RESOURCE_DATA_NOT_FOUND

Тема в разделе "WASM.ASSEMBLER", создана пользователем p0tap, 20 июн 2007.

  1. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    Народ, объясните плиз. Почему при,примерно, таком коде

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\iphlpapi.inc  
    7.          
    8. includelib \masm32\lib\kernel32.lib
    9. includelib \masm32\lib\iphlpapi.lib
    10.  
    11. .data
    12. buf_size db 648 dup(0)
    13. ip_adapter_info_struc dd 648
    14.  
    15. .code
    16.   start:
    17.    invoke GetAdaptersInfo,ip_adapter_info_struc, buf_size
    18.    invoke ExitProcess,0
    19.   end start
    Оля выдаёт ошибку(в LastErr)
    ERROR_RESOURCE_DATA_NOT_FOUND (00000714)
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    714
    ERROR_RESOURCE_DATA_NOT_FOUND
    The specified image file did not contain a resource section.
     
  3. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    ну это я понимаю, но в чём ошибка то? Места под структуру мало чтоли? но там другая ошибка должны быть
     
  4. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    p0tap
    Структура у тебя в секции данных. Проверь валидность своего экзешника в каком-нибудь PE-Viewerе.
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    p0tap
    Ошибку надо смотреть не в LastErr, а в EAX. Для твоего кода это будет 57h - ERROR_INVALID_PARAMETER. Смотри документацию - первый параметр _адрес_ буфера, второй - его размер.
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    buf_size dd 648
    ip_adapter_info_struc db 648 dup(0)
     
  7. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\iphlpapi.inc  
    7.          
    8. includelib \masm32\lib\kernel32.lib
    9. includelib \masm32\lib\iphlpapi.lib
    10.  
    11. .data
    12. buf_size dd 648
    13. ip_adapter_info_struc dd 648 dup(0)
    14.  
    15. .code
    16.   start:
    17.    invoke GetAdaptersInfo,ip_adapter_info_struc, buf_size
    18.    mov esi,ip_adapter_info_struc
    19.    invoke ExitProcess,0
    20.   end start
    Да. с передаваемыми параметрами я накосячил. Еще кой что, почему теперь прога исполняется, но при трасировке как то всё не так, не хочет возвращатся из функции GetAdaptersInfo. И в eax обнаруживается 00000004. Походу опять код ошибки..Поидее функция должна вернуть в ip_adapter_info_struc инф. о сетевых интерфесах. Но вот у меня чтото всё никак с ней не получается, объясните проблему пожалуйста
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    p0tap

    DWORD GetAdaptersInfo(
    PIP_ADAPTER_INFO pAdapterInfo,
    PULONG pOutBufLen
    );
    Параметры
    pAdapterInfo
    Указатель на буфер, в который записывается список структур IP_ADAPTER_INFO.
    pOutBufLen
    Указатель на переменную ULONG, которая содержит размер, требуемый для буфера pAdapterInfo.

    Проверь, правильно ли ты передаешь параметры и правильно ли их создаешь.

    Пример на С
    Код (Text):
    1. #include <stdio.h>
    2. #include <windows.h>
    3. #include <iphlpapi.h>
    4.  
    5. main()
    6. {
    7.    IP_ADAPTER_INFO * AdapterInfo;
    8.    ULONG    ulOutBufLen;
    9.  
    10.  AdapterInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR,sizeof(IP_ADAPTER_INFO));
    11.  ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    12.    
    13.    GetAdaptersInfo(AdapterInfo, &ulOutBufLen);
    14.    }
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1.     DWORD re,cbSize = sizeof(IP_ADAPTER_INFO);
    2.     PIP_ADAPTER_INFO ai = (PIP_ADAPTER_INFO)HeapAlloc(GetProcessHeap(),0,cbSize);
    3.     if((re = GetAdaptersInfo(ai, &cbSize) == ERROR_BUFFER_OVERFLOW){
    4.         HeapReAlloc(GetProcessHeap(),0,ai,cbSize);
    5.         re = GetAdaptersInfo(ai, &cbSize);
    6.     }
    7.     if(!re){
    8.         // iterate adapter records
    9.     }else{
    10.         // error
    11.     }
    12.     HeapFree(GetProcessHeap(),0,ai);
     
  10. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    нет, ну например было
    Код (Text):
    1. .data
    2. ip_adapter_info_struc dd 100 dup(0)
    3. buf_size dd 100
    Смотрим оли:
    Код (Text):
    1. 00401023   |. FF35 90314000  PUSH DWORD PTR DS:[403190]            ;здесь у  нас переменная с кол-вом байтов под
    2. структуру
    3. 00401029   |. 68 00304000    PUSH prog_.00403000                                  ;здесь адрес на начало области памяти
    4. 0040102E   |. E8 1F000000    CALL <JMP.&iphlpapi.GetAdaptersInfo>
    Стёк:
    Код (Text):
    1. 0012FFBC   00403000  prog_.00403000
    2. 0012FFC0   00000064                           ;64 при переводе в 10тиричную - 100
    параметры справа налево,т.е. всё норм. еслибы был маленький буфер,он бы выдал соотв. ошибку,а тут какаято беда
     
  11. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    блин,я не знаю С.знаю С#, но это делу не поможет =) Тут вроде как раздел асмы,а примеры на сях толкают=)
     
  12. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    p0tap
    Иногда на С легче объяснить... Ассемблерный вариант всегда можешь посмотреть либо в самой среде разработки, либо в дебуггере.
    Проверь еще раз, правильно ли ты передаешь параметры вызываемой функции.
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    То так, но на асме будет примерно то же самое.

    А надо - адрес переменной:
    invoke GetAdaptersInfo,addr ip_adapter_info_struc, addr buf_size

    Но и это не поможет, т.к. 1й параметр - не структура, а список их, поэтому память надо выделять динамически - см.выше.
     
  14. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    Спасибо. А вот что с этим делать? IP_ADAPTER_INFO, её самому перегонять под асм или что? в
    \masm32\include\windows.inc
    данная структура не определена. Просто как то уж больно жутко она выглядит =)

    ---------------------------------
    Вот в одном из примеров нашёл
    Код (Text):
    1. ****
    2. .data
    3. pinfo       IP_ADAPTER_INFO <>
    4. ****
    У меня компилятор ругается на эту строку. Я в асме не силён, рассчитываю на Вашу помощь
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Угу
     
  16. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    p0tap
    Ну не так уж и жутко. В каком-то смысле даже проще :)
     
  17. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    ппц. там получается 3-4 структуры перебивать прийдётся..а я не думаю,что у меня получится.мб всё таки есть другие способы?=))
    вот код в инете нашёл для получения мак адреса сет. карты.
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include     \masm32\include\windows.inc
    6. include     \masm32\include\user32.inc
    7. include     \masm32\include\kernel32.inc
    8. include     \masm32\include\IpHlpApi.inc
    9. includelib  \masm32\lib\user32.lib
    10. includelib  \masm32\lib\kernel32.lib
    11. includelib  \masm32\lib\IpHlpApi.lib
    12.  
    13. .data
    14. pinfo       IP_ADAPTER_INFO <>
    15. len         dd  0
    16. String      db  '%02X:%02X:%02X:%02X:%02X:%02X',0
    17. Buffer      db  18 dup (0)
    18. Text        db  'MAC Address,',0
    19.  
    20. .code
    21. Start:
    22.     invoke  GetAdaptersInfo,addr pinfo,addr len
    23.     invoke  GlobalAlloc,GMEM_FIXED,len
    24.     push    eax
    25.     invoke  GetAdaptersInfo,eax,addr len
    26.     pop     esi
    27.     push    esi
    28.     assume  esi:ptr IP_ADAPTER_INFO
    29.     movzx   eax,byte ptr [esi].Address[5]
    30.     push    eax
    31.     movzx   eax,byte ptr [esi].Address[4]
    32.     push    eax
    33.     movzx   eax,byte ptr [esi].Address[3]
    34.     push    eax
    35.     movzx   eax,byte ptr [esi].Address[2]
    36.     push    eax
    37.     movzx   eax,byte ptr [esi].Address[1]
    38.     push    eax
    39.     movzx   eax,byte ptr [esi].Address[0]
    40.     push    eax
    41.     push    offset String
    42.     push    offset Buffer
    43.     call    wsprintf
    44.     pop     eax
    45.     invoke  GlobalFree,eax
    46.     invoke  MessageBox,0,addr Buffer,addr Text,MB_OK
    47.     invoke  ExitProcess,eax
    48.  
    49. end     Start
    И рядом в раре лежит экзэшник.
    Инклудятся у меня теже либы и пр.,у него
    Код (Text):
    1. pinfo       IP_ADAPTER_INFO <>
    И как то получилось скомпилировать, а у меня касячит страшно. Донесите до меня, мб я тугой, но в чём прекол то?
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    разные версии масма => инклудов.
     
  19. p0tap

    p0tap New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    9
    ок. всё,проблема разрешилась. спасибо всем за помощь,наставления
    ЗЫ мб кому пригодятся структуры

    Код (Text):
    1. IP_ADDRESS_STRING struct
    2.     String db 16 dup (?)
    3. IP_ADDRESS_STRING ends
    4.  
    5.  
    6. IP_ADDR_STRING struct
    7.     Next        dd ?
    8.     IpAddress   db 16 dup (?)
    9.     IpMask      db 16 dup (?)
    10.     Context     dd ?   
    11. IP_ADDR_STRING ends
    12.  
    13.  
    14.  
    15. IP_ADAPTER_INFO struct
    16.     Next            dd ?
    17.     ComboIndex      dd ?
    18.     AdapterName     db 260 dup (?)
    19.     Description     db 132 dup (?)
    20.     AddressLength       dd ?
    21.     Address         db 8 dup (?)
    22.     Index           dd ?
    23.     tType           dd ?
    24.     DhcpEnabled     dd ?
    25.     CurrentIpAddress    dd ?
    26.     IpAddressList       IP_ADDR_STRING <>
    27.     GatewayList     IP_ADDR_STRING <>
    28.     DhcpServer      IP_ADDR_STRING <>
    29.     HaveWins        dd ?
    30.     PrimaryWinsServer   IP_ADDR_STRING <>
    31.     SecondaryWinsServer IP_ADDR_STRING <>
    32.     LeaseObtained       dd ?
    33.     LeaseExpires        dd ?
    34. IP_ADAPTER_INFO ends