Помогите разобраться с api функцией time ()!

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 22 май 2010.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    ...Пожалуйста...
    Друзья! Вот код, компилятор MASM на него ругается, конкретно на строку: invoke time, NULL

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10. include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\msvcrt.lib
    12.  
    13. .code
    14.  
    15.  start:
    16.  invoke time, NULL
    17.  invoke ExitProcess, 0
    18.  end start
    Пишет, что ошибка A2006
    В общем, решил я разобраться с этой функцией
    1) Захожу в папку с инклудами, пишу:
    Код (Text):
    1. FIND /I "time proto" *.inc> rez.txt
    ищу где есть прототип такой функции
    Прототипа. нет, в rez.txt оказывается куча всяких других прототипов типа:
    timeGetSystemTime PROTO :lol: WORD,:lol: WORD
    timeGetTime PROTO

    И прочая, но нужного нет

    Меж тем 100% эта функция присутствует конкретно в файле msvcrt.dll
    Вот код на С:
    Код (Text):
    1. #include <time.h>
    2.  
    3. int main () {
    4.  time(0);
    5.  return 0;
    6. }
    Когда я его исследую в OllyDbg, то вижу, что вызывается именно time, а не какая-либо её разновидность и именно из вышеуказанного модуля и адрес видно и всё. Но вот что-то не получается в асме её вызвать. Спасибо.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    >Прототипа. нет, в rez.txt оказывается куча всяких других прототипов типа:
    Написать: extern time:near или через PROTO.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Что-то не помогает, ни тот вариант, ни этот. Ошибки при линковке, кажись
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10. include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\msvcrt.lib
    12.  
    13. time PROTO: DWORD
    14. ;extern time:near
    15. .code
    16.  
    17.  start:
    18.  invoke time, NULL
    19.  invoke ExitProcess, 0
    20.  end start
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    amvoz
    Это сишная либа, её нет в пакете Хатчессона.
     
  5. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    Код (Text):
    1. ;@echo off
    2. ;goto make
    3. .686
    4. .model flat,stdcall
    5. option casemap:none
    6. includelib \masm32\msvcrt.lib
    7. printf PROTO C :VARARG
    8. system PROTO C :DWORD
    9.  
    10. .data
    11. hello db 0Dh,0Ah,"hello world",0Dh,0Ah,0
    12. stop db "pause",0
    13. .code
    14. start:
    15. invoke printf ,offset hello
    16. invoke system ,offset stop
    17. ret
    18. end start
    19.  
    20. :make
    21. set exe=%~n0
    22.  
    23. \masm32\ml /nologo /c /coff %0
    24. if not exist %exe%.rc goto chisto
    25. \masm32\RC /nologo %exe%.RC
    26. \masm32\link /nologo /subsystem:console %exe%.obj %exe%.res
    27. del %exe%.res
    28. goto final
    29. :chisto
    30. \masm32\link /nologo /subsystem:console %exe%.obj
    31. :final
    32. del %exe%.obj
    33. echo.
    34. pause
    ;)
     
  6. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    amvoz
    Если че у меня ml и link из 10 студии и все компилится (а то есть подозрения):)
     
  7. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    time() никакого отношения к Win32 API не имеет. Пропиши импорт этой функции вручную из ms-как-её-там.dll и при этом не забудь, что у неё соглашение вызова cdecl, а не как в Винде принято.
     
  8. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Код (Text):
    1. invoke crt_time, 0
    или без msvcrt.inc
    Код (Text):
    1.  extrn _imp__time:dword
    2.  push 0
    3.  call _imp__time
    4.  add esp, 4
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    litrovith
    А либа для линкера из воздуха взялась..
    Тогда уж LoadLibrary("блабла")/GetProcAddress() используйте, тоесть динамический импорт.
     
  10. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Clerk, не понял, или ты не понял?
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10. include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\msvcrt.lib
    12.  
    13. .code
    14.  
    15.  start:
    16.  invoke crt_time, 0
    17.  invoke ExitProcess, 0
    18.  end start
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10. ;include \masm32\include\msvcrt.inc
    11. includelib \masm32\lib\msvcrt.lib
    12.  
    13. .code
    14.  
    15.  start:
    16.  extrn _imp__time:dword
    17.  push 0
    18.  call _imp__time
    19.  add esp, 4
    20.  invoke ExitProcess, 0
    21.  end start
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    litrovith
    Это откуда ?
    Ладно я туда копирую либы из ддк, студии и пр., но автор думаю это не делает %.
     
  12. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Clerk, а чё никто больше не догадывается это делать чтоли? Все остальные тупые и не умеют нажимать CTRL+C и CTRL+V?
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    litrovith
    Подождём автора. Кнопки жать все умеют, только в нжной комбинации не все ;)
     
  14. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    + берем dll и читаем "как создать инвокеабельную библиотеку импорта" на васме и усе
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Юзаем системинфо или извлекаем инфу из кд и никакие левые модуля не нужны. Почитайте вопрос вначале.
     
  16. FLASH300

    FLASH300 New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2008
    Сообщения:
    72
    В 6 посту я заблуждался когда-то давно мне наверно не хватило строки:
    Код (Text):
    1. includelib "\Program Files\Microsoft Visual Studio 10.0\VC\lib\msvcrt.lib"
     
  17. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    В общем я увидел пути: либо использовать функцию-заменитель crt_time либо на ходу искать адрес time, я выбрал второй путь, зацените:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9.  
    10.  
    11. .data
    12.  
    13. ;Это вот херь нужна для определения адреса функции time
    14. ;Её в пакете Хатчессона нет, что ли...
    15. dll_file_name db "C:\Windows\system32\msvcrt.dll", 0
    16. time db "time", 0
    17.  
    18. ;Сюда запихаем адрес msvcrt.dll
    19. address_dll DWORD ?
    20.  
    21.  
    22.  
    23. .code
    24.  start:
    25.   invoke LoadLibrary, addr dll_file_name
    26.   mov address_dll, eax
    27.  
    28.   invoke GetProcAddress, address_dll, addr time
    29.   push 0
    30.   call eax
    31.  
    32.   ;Освободим память
    33.   invoke FreeLibrary, address_dll
    34.  
    35.  invoke ExitProcess, 0
    36.  
    37.  
    38.  end start
    ...CyberManiac
    как после этого прикажете понимать ВАши слова, что
    ?
     
  18. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    Жесть. Генрих Гейне и Clerk окакзались правы.
     
  19. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Я клещами из тебя слова вытягивать не буду. Хочешь таинственности нагнать на себя- Бога ради. Только имей ввиду: последнее- удел прыщавых малолеток, а не мужчин, познавших сущность вещей.
     
  20. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    amvoz, да я и не спорю :) , только мозги продавали в другом разделе.