AT&T синтаксис :: проблема с адрессацией операндов

Тема в разделе "WASM.ASSEMBLER", создана пользователем UTeX, 28 фев 2008.

  1. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну порядок должен быть другой во-первых. ты же в пеб записываешь, а не читаешь из него.
    а насчет обращения к переменной хз
     
  3. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    gcc?
    афаир там в мануалах все написано, и переменный являются как бы параметрами вставки.
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. __asm__
    2.     (
    3.         "movl %fs:0x18,%eax\n"      //Getting self TIB
    4.         "movl 0x30(%eax),%eax\n"    //Getting PEB
    5.         "movl %0,%eax"                //вот эта часть не воспринимается :: "Undefined reference to 'Peb' "
    6.     : : "r" (&Peb));
     
  6. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  7. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    UTeX
    Код (Text):
    1. asm ("movl %%eax, %0\n" :"=r"(Peb));
    ?
     
  9. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    UTeX
    Что генерит компилятор для
    Код (Text):
    1. PPEB GetCurrentPEB()
    2. {
    3.     PPEB Peb;
    4.     asm ("movl %%eax, %0\n" :"=r"(Peb));
    5.     return Peb;
    6. }
     
  11. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  13. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    UTeX
    Продолжим. Что генерит компилятор для
    Код (Text):
    1. PPEB GetCurrentPEB()
    2. {
    3.     PPEB Peb;
    4.     asm(
    5.         "movl %fs:0x18,%eax\n"
    6.         "movl 0x30(%eax),%eax\n"
    7.     );
    8.     asm ("movl %%eax, %0\n" :"=r"(Peb));
    9.     return Peb;
    10. }
    но чего с тем кодом в связке этот кусок не компилится
    Для начала не помешает огласить компилятор, а потом, если _хорошенько_ подумать, то можно все запихать в _один_ asm("...").
     
  14. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  15. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. {
    2.     PPEB Peb;
    3.     __asm__("movl %%fs:0x18, %%eax\n\
    4.                movl 0x30(%%eax),%%eax\n\
    5.                        movl %%eax, %0" : "=m" (Peb));
    6.     return Peb;
    7. }
     
  16. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    UTeX
    Это mingw32-c++ 3.4.5
    Я так понимаю, что речь о gcc 3.4.5.

    на этом закончим
    Вдогонку. Зачем вообще переменная Peb? Берем код
    Код (Text):
    1. PPEB GetCurrentPEB(void)
    2. {
    3.   __asm__
    4.   (
    5.     "movl %%fs:0x18, %%eax\n"
    6.     "movl 0x30(%%eax),%%eax\n"
    7.   );
    8. }
    компилируем
    Код (Text):
    1. "g++.exe" -fomit-frame-pointer -S foo.c
    получаем
    Код (Text):
    1.     .file   "foo.c"
    2.     .text
    3.     .align 2
    4. .globl __Z13GetCurrentPEBv
    5.     .def    __Z13GetCurrentPEBv;    .scl    2;  .type   32; .endef
    6. __Z13GetCurrentPEBv:
    7. /APP
    8.     movl %%fs:0x18, %%eax
    9. movl 0x30(%%eax),%%eax
    10.  
    11. /NO_APP
    12.     ret
    ps а если еще inline PPEB GetCurrentPEB(void){ ..., то вообще ...
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    достаточно
    Код (Text):
    1. PPEB GetCurrentPEB(void)
    2. {
    3.   __asm__
    4.   (
    5.     "movl %%fs:0x30, %%eax\n"
    6.   );
    7. }
     
  19. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584