Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+4 невидимых)

 eXeL@B —› Программирование —› Адрес метки :: стандартный С компилятор
Посл.ответ Сообщение

Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2008 16:10
· Личное сообщение · #1

Вобщем-то интересует есть ли такая возможность - получить адрес метки до ее объявления в виде
some_label:
В GNU C есть вот такой способ объявить метку
&&some_label;
если что-то подобное и стандартное в С. Скорее всего ответ простой, но что то не доходит.
Нестандартные методы тоже сойдут.
Погите вобщем, кто чем может.



Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2008 16:54
· Личное сообщение · #2

Стандартного ничего нет точно. Есть ли какие то идеи нестандартного получения адреса?



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 13 мая 2008 18:15
· Личное сообщение · #3

__asm
{
call some_label
pop addr
}




Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2008 19:12
· Личное сообщение · #4

как бы это понятно) - но тогда вызов произойдет




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 13 мая 2008 20:17
· Личное сообщение · #5

UTeX_, сделай __declspec naked функцию - её имя это function pointer.



Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2008 20:20
· Личное сообщение · #6

s0larian
не - такой вариант тоже не подходит
почему - просто из за нагромождения - это просто некрасиво

вобщем решение найдено
всем спасибо за участие
тема закрыта



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 20:32
· Личное сообщение · #7

вобщем решение найдено
А можно на решение посмотреть?



Ранг: 2.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 мая 2008 20:36 · Поправил: UTeX_
· Личное сообщение · #8

да, конечно

вот такой макрос


#define ObtainLabelAddr(addr,label)
__asm mov eax, label
__asm mov dword ptr[addr],eax



и код


void main()
{
DWORD Addr;
__asm int 3;
ObtainLabelAddr(Addr, _some_label);
some_function(Addr);
//some code
_some_label:
//some code
}



 eXeL@B —› Программирование —› Адрес метки :: стандартный С компилятор
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати