Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

mov esi, dword ptr [eax+$34]

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 22.04.2012, 23:02   #1
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию mov esi, dword ptr [eax+$34]

Доброе время суток.

возникла необходимость вынести константы инжекта движения в файл, все хорошо, но при попытке использовать вместо

mov esi, dword ptr [eax+$34]

mov esi, dword ptr [eax+ofs]

клиент вылетает.

Переменная объявлена внутри процедуры тип dword, присваивается там же, до объявления asm.

Не подскажете как решить проблему? Был бы премного благодарен.
  Ответить с цитированием
Старый 23.04.2012, 00:06   #2
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Я в отдельном файле прописываю оффсеты вот так:
#define OFFSET 0x34
подключаю файл к проекту и в программе уже пишу
mov esi, dword ptr [eax+OFFSET]
в делфи наверное есть тоже аналог #define
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Старый 23.04.2012, 00:10   #3
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

gurin, переменная объявлена внутри процедуры и инициализируется там же?
Значит в там же и открывается файл? Но ведь эта процедура выполняется в игре, а не в программе : D
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 23.04.2012 в 00:13.
  Ответить с цитированием
Старый 23.04.2012, 10:13   #4
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от dwa83Посмотреть сообщение
Я в отдельном файле прописываю оффсеты вот так:
#define OFFSET 0x34
подключаю файл к проекту и в программе уже пишу
mov esi, dword ptr [eax+OFFSET]
в делфи наверное есть тоже аналог #define

Такой метод не подойдёт
Я хочу сделать так, что бы программу не надо было перекомпилировать под новые оффсеты.

Добавлено через 6 минут
Цитата:
Сообщение от BritishColonistПосмотреть сообщение
gurin, переменная объявлена внутри процедуры и инициализируется там же?
Значит в там же и открывается файл? Но ведь эта процедура выполняется в игре, а не в программе : D

Нет, файл открывается в моём приложении, данные передаются через параметры. Значения параметров верные. Внутри процедуры локальным переменным присваиваются значения переданные параметрами.

Вот собственно код

так работает:

Код:
type
  PWalkParams = ^TWalkParams;

  TWalkParams = packed record
    Packet: array [0 .. 100] of Byte;
    BaseAddr, GameAddr, CallAddress1, CallAddress2, CallAddress3: Pointer;
    x, y, z: single;
    flying: DWord;
    ofs1, ofs2, ofs3, ofs4, ofs5, ofs6, ofs7, ofs8: DWord;
    Param4: array [1 .. 72] of widechar;
  end;

procedure WalkCall(aPParams: PWalkParams); Stdcall;
var
  GameAddr, CallAddress1, CallAddress2, CallAddress3: Pointer;
  ofs1, ofs2, ofs3, ofs4, ofs5, ofs6, ofs7, ofs8: dword;
  x, y, z: single;
  flying: DWord;
begin
  GameAddr := aPParams.GameAddr;
  CallAddress1 := aPParams.CallAddress1;
  CallAddress2 := aPParams.CallAddress2;
  CallAddress3 := aPParams.CallAddress3;
  {
    ofs1 := aPParams.ofs1;
    ofs2 := aPParams.ofs2;
    ofs3 := aPParams.ofs3;
    ofs4 := aPParams.ofs4;
    ofs5 := aPParams.ofs5;
    ofs6 := aPParams.ofs6;
    ofs7 := aPParams.ofs7;
    ofs8 := aPParams.ofs8;
  }
  x := aPParams.x;
  y := aPParams.y;
  z := aPParams.z;
  flying := aPParams.flying;
  asm
    pushad
    mov eax, GameAddr
    mov eax, dword ptr [eax]
    mov esi, dword ptr [eax+$34]
    mov ecx, dword ptr [esi+$1050]
    push 1
    call CallAddress1
    mov edi, eax
    lea eax, dword ptr [esp+$18]
    push eax
    push flying
    mov ecx, edi
    call CallAddress2
    mov ecx, dword ptr [esi+$1050]
    push 0
    push 1
    push edi
    push 1
    call CallAddress3
    mov eax, GameAddr
    mov eax, dword ptr [eax]
    mov eax, dword ptr [eax+$34]
    mov eax, dword ptr [eax+$1050]
    mov eax, dword ptr [eax+$30]
    mov ecx, dword ptr [eax+$4]
    mov eax, x
    mov dword ptr[ecx+$20], eax
    mov eax, z
    mov dword ptr[ecx+$24], eax
    mov eax, y
    mov dword ptr[ecx+$28], eax
    popad
  end;
end;

function Walk(x, y, z: single; WalkMode: Byte): Boolean;
var
  aParams: TWalkParams;
begin
  if WalkMode = 0 then
    aParams.flying := 0
  else
  begin
    aParams.flying := 1;
  end;
  aParams.BaseAddr := Pointer(_base_addr);
  aParams.GameAddr := Pointer(_game_addr);
  aParams.CallAddress1 := Pointer(walkX_inject_addr);
  aParams.CallAddress2 := Pointer(walkY_inject_addr);
  aParams.CallAddress3 := Pointer(walkZ_inject_addr);
  aParams.ofs1 := walk_ofs1;
  aParams.ofs2 := walk_ofs2;
  aParams.ofs3 := walk_ofs3;
  aParams.ofs4 := walk_ofs4;
  aParams.ofs5 := walk_ofs5;
  aParams.ofs6 := walk_ofs6;
  aParams.ofs7 := walk_ofs7;
  aParams.ofs8 := walk_ofs8;
  aParams.x := x;
  aParams.y := y;
  aParams.z := z;
  Result := (aParams.CallAddress1 <> nil) and (aParams.CallAddress2 <> nil) and
    (aParams.CallAddress3 <> nil) and (aParams.BaseAddr <> nil) and
    (aParams.GameAddr <> nil);
  if Result then
    InjectFunc(_hProcess, @WalkCall, @aParams, SizeOf(aParams));
end;
так вышибает клиента

Код:
type
  PWalkParams = ^TWalkParams;

  TWalkParams = packed record
    Packet: array [0 .. 100] of Byte;
    BaseAddr, GameAddr, CallAddress1, CallAddress2, CallAddress3: Pointer;
    x, y, z: single;
    flying: DWord;
    ofs1, ofs2, ofs3, ofs4, ofs5, ofs6, ofs7, ofs8: DWord;
    Param4: array [1 .. 72] of widechar;
  end;

procedure WalkCall(aPParams: PWalkParams); Stdcall;
var
  GameAddr, CallAddress1, CallAddress2, CallAddress3: Pointer;
  ofs1, ofs2, ofs3, ofs4, ofs5, ofs6, ofs7, ofs8: dword;
  x, y, z: single;
  flying: DWord;
begin
  GameAddr := aPParams.GameAddr;
  CallAddress1 := aPParams.CallAddress1;
  CallAddress2 := aPParams.CallAddress2;
  CallAddress3 := aPParams.CallAddress3;
  
    ofs1 := aPParams.ofs1;
    ofs2 := aPParams.ofs2;
    ofs3 := aPParams.ofs3;
    ofs4 := aPParams.ofs4;
    ofs5 := aPParams.ofs5;
    ofs6 := aPParams.ofs6;
    ofs7 := aPParams.ofs7;
    ofs8 := aPParams.ofs8;
  
  x := aPParams.x;
  y := aPParams.y;
  z := aPParams.z;
  flying := aPParams.flying;
  asm
    pushad
    mov eax, GameAddr
    mov eax, dword ptr [eax]
    mov esi, dword ptr [eax+ofs1]
    mov ecx, dword ptr [esi+ofs2]
    push 1
    call CallAddress1
    mov edi, eax
    lea eax, dword ptr [esp+ofs3]
    push eax
    push flying
    mov ecx, edi
    call CallAddress2
    mov ecx, dword ptr [esi+ofs2]
    push 0
    push 1
    push edi
    push 1
    call CallAddress3
    mov eax, GameAddr
    mov eax, dword ptr [eax]
    mov eax, dword ptr [eax+ofs1]
    mov eax, dword ptr [eax+ofs2]
    mov eax, dword ptr [eax+ofs4]
    mov ecx, dword ptr [eax+ofs5]
    mov eax, x
    mov dword ptr[ecx+ofs6], eax
    mov eax, z
    mov dword ptr[ecx+ofs7], eax
    mov eax, y
    mov dword ptr[ecx+ofs8], eax
    popad
  end;
end;

function Walk(x, y, z: single; WalkMode: Byte): Boolean;
var
  aParams: TWalkParams;
begin
  if WalkMode = 0 then
    aParams.flying := 0
  else
  begin
    aParams.flying := 1;
  end;
  aParams.BaseAddr := Pointer(_base_addr);
  aParams.GameAddr := Pointer(_game_addr);
  aParams.CallAddress1 := Pointer(walkX_inject_addr);
  aParams.CallAddress2 := Pointer(walkY_inject_addr);
  aParams.CallAddress3 := Pointer(walkZ_inject_addr);
  aParams.ofs1 := walk_ofs1;
  aParams.ofs2 := walk_ofs2;
  aParams.ofs3 := walk_ofs3;
  aParams.ofs4 := walk_ofs4;
  aParams.ofs5 := walk_ofs5;
  aParams.ofs6 := walk_ofs6;
  aParams.ofs7 := walk_ofs7;
  aParams.ofs8 := walk_ofs8;
  aParams.x := x;
  aParams.y := y;
  aParams.z := z;
  Result := (aParams.CallAddress1 <> nil) and (aParams.CallAddress2 <> nil) and
    (aParams.CallAddress3 <> nil) and (aParams.BaseAddr <> nil) and
    (aParams.GameAddr <> nil);
  if Result then
    InjectFunc(_hProcess, @WalkCall, @aParams, SizeOf(aParams));
end;
Добавлено через 8 минут
разница только в том что я заменил

mov esi, dword ptr [eax+$34]

на

mov esi, dword ptr [eax+ofs]

в связи с чем собственно и вопрос

Последний раз редактировалось gurin; 23.04.2012 в 10:21. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 23.04.2012, 10:42   #5
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

А все эти "ofs" инициализируются для передаваемой в функцию записи PWalkParams?

Добавлено через 33 минуты
Ладно, вот годный вариант.
До внедрения кода процедура находится в памяти приложения. В ней смещения и BA указаны статически (не переменными). Читаем из основной программы INI-конфиг, чтобы получить новые значения для BA и оффсетов, патчим код процедуры. Для этого понадобится определить точное смещение от начала процедуры до нужных оффсетов, следовательно, процедуру нужно правильно составить для частного случая (для определённых оффсетов), а затем исследовать в отладчике, чтобы получить смещения до оффсетов.
Уже пропатченный код можно внедрять (при этом патч придётся поставить лишь один раз - при считывании конфига).
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 23.04.2012 в 11:15. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 23.04.2012, 18:45   #6
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Проверял ли значения параметров ofs перед инжектом? Может считываются не правильно?
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Старый 23.04.2012, 20:54   #7
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
До внедрения кода процедура находится в памяти приложения. В ней смещения и BA указаны статически (не переменными). Читаем из основной программы INI-конфиг, чтобы получить новые значения для BA и оффсетов, патчим код процедуры. Для этого понадобится определить точное смещение от начала процедуры до нужных оффсетов, следовательно, процедуру нужно правильно составить для частного случая (для определённых оффсетов), а затем исследовать в отладчике, чтобы получить смещения до оффсетов.
Уже пропатченный код можно внедрять (при этом патч придётся поставить лишь один раз - при считывании конфига).

О_О, эээмммм.... написать патч для собственного приложения? И как понимаю ни в коем случае не менять там ничего, а то не дай бог смещения поедут... Не, вариант с перекомпиляцией лучше. Во всяком случае надежнее.


Цитата:
Сообщение от dwa83Посмотреть сообщение
Проверял ли значения параметров ofs перед инжектом? Может считываются не правильно?

да, конечно, значения верные.
  Ответить с цитированием
Старый 23.04.2012, 21:11   #8
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

gurin, а в чём проблема установки патча в собственное приложение?
Просто при запуске берутся оффсеты и производится запись по некоторым адресам. Это несложно.
Я имел в виду "самопатч", чтобы программа изменила несколько байтов собственного кода. Этот код в любом случае будет выполнен не в самой программе, а в клиенте игры.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
  Ответить с цитированием
Старый 23.04.2012, 22:20   #9
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от BritishColonistПосмотреть сообщение
gurin, а в чём проблема установки патча в собственное приложение?
Просто при запуске берутся оффсеты и производится запись по некоторым адресам. Это несложно.
Я имел в виду "самопатч", чтобы программа изменила несколько байтов собственного кода. Этот код в любом случае будет выполнен не в самой программе, а в клиенте игры.

Мне кажется подобный путь еще больше проблем доставит. Все-таки хотелось бы понять как данные из переменных использовать в asm-коде. Там что-то простое, только вот что... знать бы
  Ответить с цитированием
Старый 24.04.2012, 00:42   #10
 Разведчик
Аватар для silk
 
silk на правильном путиsilk на правильном пути
Регистрация: 14.12.2009
Сообщений: 7
Популярность: 179
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от gurinПосмотреть сообщение
я заменил
mov esi, dword ptr [eax+$34]
на
mov esi, dword ptr [eax+ofs]
в связи с чем собственно и вопрос

патамуушта - сюрприз - ofs трактуется как адрес, а не как значение по этому адресу.

mov esi, dword ptr [ofs] - загружает значение переменной ofs
mov esi, dword ptr [eax+ofs] - загружает что?
ПОтому что не умеет оно в одной такой команде обращаться к двум адресам памяти сразу.
  Ответить с цитированием
Старый 24.04.2012, 07:59   #11
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от gurinПосмотреть сообщение
разница только в том что я заменил

mov esi, dword ptr [eax+$34]

на

mov esi, dword ptr [eax+ofs]

в связи с чем собственно и вопрос

Чтобы корректно заработало нужно значение переменной в регистр сначала поместить, а потом уже пользоваться:
Код:
mov esi, ofs
mov esi, dword ptr [eax + esi]
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Пользователь сказал cпасибо:
/GeG/ (04.08.2012)
Старый 04.05.2012, 16:15   #12
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от krukovisПосмотреть сообщение
Чтобы корректно заработало нужно значение переменной в регистр сначала поместить, а потом уже пользоваться:

пробовал, но видимо не всеми регистрами можно пользоваться - вышибает клиента
понятно что пользовался не теми, что используются тут же, за исключением случаев, когда они там же и инициализировались

Судя из вышесказанного, я понял что понимаю я все верно. Буду копать. Спасибо всем кто ответил.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 24.05.2012, 05:34   #13
 Разведчик
Аватар для krysun
 
krysun на правильном пути
Регистрация: 01.07.2009
Сообщений: 21
Популярность: 83
Сказал(а) спасибо: 30
Поблагодарили 14 раз(а) в 11 сообщениях
Отправить сообщение для krysun с помощью Skype™
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

#define в delphi нет. в XE тоже не появилось...
Аналога также нет)))
Да и include нормального няма) Всё клёвенько))))
  Ответить с цитированием
Старый 24.05.2012, 22:53   #14
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

у меня как-то так :


Код:
unit uPWGlobals;

interface

Uses
  Windows, SysUtils;

Const


  PW_BASE_ADDRESS   = $00A571E0; 
  PW_DYNAMIC_BASE_OFFSET = $001c;       // [base] + 1c = CECGameRun
  PW_ROLE_BASE_OFFSET = $0034;          // [base] + 1c + 34

  FlyAddress        = $00477010; //

.......


Код:
unit uPWInjectCodes;

interface

Uses Windows, uPWGlobals;

procedure FlyOrFallCall(aPParams: PParams); stdcall;


implementation

procedure FlyOrFallCall(aPParams: PParams); stdcall;
var
  AddrCall : pointer;
begin
  AddrCall :=Pointer(FlyAddress);
  asm
    pushad
    mov ecx, dword ptr [PW_BASE_ADDRESS]
    mov ecx, dword ptr [ecx + PW_DYNAMIC_BASE_OFFSET]
    mov ecx, dword ptr [ecx + PW_ROLE_BASE_OFFSET]
    push 1
    call AddrCall
    popad
  end;
end;
и всё отличненько работает.
  Ответить с цитированием
Старый 03.08.2012, 23:59   #15
 Разведчик
Аватар для gurin70
 
gurin70 никому не известный тип
Регистрация: 10.02.2010
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: mov esi, dword ptr [eax+$34]

Цитата:
Сообщение от krysunПосмотреть сообщение
#define в delphi нет. в XE тоже не появилось...
Аналога также нет)))
Да и include нормального няма) Всё клёвенько))))

include в delphi нормальный - полный аналог С++, даже лучше, т.к. без всяких условностей, аналога define не знаю, т.к. не требовалось столь жестко поступать, боюсь что он там есть и объявляется также, но не уверен, const вполне достаточно для моих целей

Цитата:
Сообщение от vogelПосмотреть сообщение
и всё отличненько работает.

но я хотел считывать адреса из файла, дабы не перекомпилировать программу каждый раз после обновы

решение тут пока вижу только одно

Цитата:
Сообщение от krukovisПосмотреть сообщение
Чтобы корректно заработало нужно значение переменной в регистр сначала поместить, а потом уже пользоваться:

но неиспользуемых регистров не хватает
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 13:46.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net