Сделать глобальными метки из .asm файла

Тема в разделе "WASM.ASSEMBLER", создана пользователем Synth, 7 июл 2009.

  1. Synth

    Synth New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2007
    Сообщения:
    50
    собственно, есть примерно такой код:
    Код (Text):
    1. PUBLIC  dwSize
    2.  
    3. .CODE
    4. Proc PROC
    5.         xor         eax, eax
    6.         retn   
    7. Proc ENDP
    8.  
    9. dwSize  DD SIZE
    10.  
    11. SIZE        equ $-Proc
    12.  
    13. END
    переменая dwSize доступна с сишном коде, всё пучком:
    Код (Text):
    1. extern "C" DWORD dwSize;
    а как сделать так, чтобы:
    Код (Text):
    1. PUBLIC  SIZE
    2.  
    3. .CODE
    4. Proc PROC
    5.         xor         eax, eax
    6.         retn   
    7. Proc ENDP
    8.  
    9. SIZE        equ $-Proc
    10.  
    11. END
    можно было из сишного кода обращаться к публичной метке SIZE?
     
  2. Synth

    Synth New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2007
    Сообщения:
    50
    собственно, забыл сказать что если к сайзу обращаться в таком виде, как я описал - то генерируется код
    mov eax, large ds:3
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Дык это ж не метка??? это ж константа, равная длине PROC, или я ни шута не понимаю...
    Длина PROC - 3 байта. У тебя все прекрасно получилось :)))
     
  4. Synth

    Synth New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2007
    Сообщения:
    50
    я наверно не правильно пояснил что мне надо... мне надо чтобы я в сишном кодесе смог написать
    DWORD dwAsmCodeSize = SIZE;
    и туда занеслось 3.
    так как я написал - туда заносится что-то с АДРЕСА 3 - эксепшн. вот. я гдето ошибся... вопрос - где?
     
  5. jaja

    jaja New Member

    Публикаций:
    0
    Регистрация:
    23 июл 2008
    Сообщения:
    243
    Попробуй тоже самое на FASM
     
  6. Synth

    Synth New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2007
    Сообщения:
    50
    мне фасм не нужен, мне нужно чтобы это собиралось дефолтовой вижуал студией
     
  7. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Можно сделать так, как вариант:

    Код (Text):
    1. PUBLIC end_shell:DWORD
    2. PUBLIC bigin_shell:DWORD
    3.  
    4. proc begin_shell
    5. .....
    6. endp begin_shell
    7. end_shell:
    и потом:
    Код (Text):
    1. extern "C"
    2. {
    3. DWORD begin_shell;
    4. DWORD end_shell;
    5. }
    6. DWORD dwAsmCodeSize = end_shell - begin_shell;
     
  8. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Ну с перепутанным порядком proc, endp и bigin'ом =)