GTA: Modification Area
Would you like to react to this message? Create an account in a few clicks or log in to continue.
GTA: Modification Area

A website for the GTA modding scene

Search
 
 

Display results as :
 


Rechercher Advanced Search

Latest topics
» Big-game starts raising Schneider's profile
[SA] Выполняем ассемблерный код из main.scm EmptySun Mar 04, 2012 2:28 am by lavivi

» [Help] cleo created lighting
[SA] Выполняем ассемблерный код из main.scm EmptyThu Oct 14, 2010 1:03 am by findmy012

» Mission Question
[SA] Выполняем ассемблерный код из main.scm EmptyThu Oct 14, 2010 1:02 am by findmy012

» [IV] Spoiler Script
[SA] Выполняем ассемблерный код из main.scm EmptyThu Oct 14, 2010 1:02 am by findmy012

» Mission mod [help]
[SA] Выполняем ассемблерный код из main.scm EmptySat Sep 18, 2010 5:50 pm by jayd00

» Bc7 Mod Help
[SA] Выполняем ассемблерный код из main.scm EmptyFri Aug 20, 2010 11:19 am by pengpeng

» Found a bug
[SA] Выполняем ассемблерный код из main.scm EmptyFri Dec 18, 2009 4:22 am by _CJ360_

» [IV] Novitec Rosso 599 GTB
[SA] Выполняем ассемблерный код из main.scm EmptyTue Nov 17, 2009 4:22 pm by Kotton

» Hello/Guidance Request
[SA] Выполняем ассемблерный код из main.scm EmptyMon Oct 12, 2009 6:45 am by Adler

Navigation
 Portal
 Index
 Memberlist
 Profile
 FAQ
 Search
Affiliates
image

Image

Image

Image

Image

Image

Image

Image

Image

Image

image

Image

steve-m.com

Image


----- Русский -----

Если ваш сайт содержит большую коллекцию SCM/CLEO-скриптов (больше 16), напишите на мой e-mail, и я добавлю его в список. Приветствуются скрипты, которые не встречаются на других сайтах ... Спасибо. ))))


----- English -----

If your website has a big enough collection of SCM/CLEO scripts (more than 16) notify me by e-mail
, and I will add it to the list. The unique scripts are preferable ... Thank you. ))))
Log in

I forgot my password



April 2024
MonTueWedThuFriSatSun
1234567
891011121314
15161718192021
22232425262728
2930     

Calendar Calendar


You are not connected. Please login or register

[SA] Выполняем ассемблерный код из main.scm

Go down  Message [Page 1 of 1]

gtasbigfoot

gtasbigfoot
Admin



Перевод с английского

Это похоже на метод CyQ'а при вставке кода в тело main.scm для замены адресов опкодов. Я нашел два опкода, которые могут выполнят ту же функцию в San Andreas.

Это 0572 и 0A3D.

Итак, как это работает.

1. В San Andreas мы имеем 92 чита (кода). Некоторые из них нерабочие, некоторые хорошо известны и часто
используются.


2. Указанные опкоды так же хорошо известны. 0572 устанавливает нитро на все такси, 0A3D заставляет проституток платить вам (не имеет значения, я все равно использую 0572). Но не каждый знает, что эти опкоды работают подобно читам. Они устанавливают один из
92 флагов и игра начинает думать, что вы используете чит (без изменения истории читов, только применяется то, что делает чит).

3. 0A3В это чит #90, 0572 - чит #91

4. Адреса процедур всех читов хранятся в виде простых чисел (в массиве) и могут быть изменены в режиме реального времени через main.scm. Читайте статью "Меняем игровую память через SCM".

5. Суммируя, данный код меняет адрес 91-го чита на адрес внутри main.scm. После этого мы используем этот опкод, игра считывает адрес чита, переходит в тело main.scm на указанное нами место и начинает работать с кодом как ассемблерным.

Используя конструкцию hex..end в Sanny Builder возможно выполнять ЛЮБОЙ код, который вы хотите.

Лично я не очень хорошо знаю ассемблер, поэтому мой пример простой (я добавляю $1000 на счет игрока), но это только начало. Кто-нибудь, кто хорошо знает ассемблер, может написать процедуру VirtualProtect и тогда нам не потребуется патчить игру с патчем Xieon'а, чтобы изменять некоторые адреса (например, адрес гравитации).


Code:

// запускаем ассемблерный код
0@ = -429863
&0(0@,1i) = 0xA49960
&0(0@,1i) += @__AsmInjection
0572: 1
&0(0@,1i) = 0 // восстанавливаем первоначальное значение

..................
// сама вставка

:__AsmInjection
hex
//Add $1000 to the player money

81 05 50CEB700 E8030000 // add [0xB7CE50], 1000
C3                      // return

end


Этот код добавит 1000 к значению, записанному в 0xB7CE50 (адрес денег игрока). Немного бесполезный пример, но работает!

Обратите внимание: это было протестировано в San Andreas v1.0 US. Если вы имеете v1.01, пожалуйста, протестируйте работает ли код.


Code:
   
Игра версии v1.0 SCM начала адресу: 0xA49960
Игра версии v1.01 SCM начала адресу: 0xA4BFE0
0572 Addr для v1.0:  -429863   
0572 Addr для v1.01: -431117


Данный мод позволяет активировать любой чит нажатием кнопки Действие (Tab по умолчанию). Все читы активируются последовательно.

http://sannybuilder.com/files/cheater.rar


debug_mode работает Wink,

на самом деле это не имеет отношения к опкоду 00C3. Это концовка кода на ассемблере, а точнее инструкция С3 - return. Можешь посмотреть в примере в первом посте.

Исходный код такой:


Code:

03C4: set_status_text_to $4 0 'FEC_NMN'
 $4 = -1
 while true
  wait 250
  if
    00E1:  key_pressed 0 4
  then
    inc($4)
    0@ = -429863
    &0(0@,1i) = 10789350
    0572: 1
    03E5: 'CHEAT1'
    wait 1000
  end
 end
end_thread
hex
 A1 7099A4 00    // mov eax, $4
 50              // push eax
 E8 7FE19EFF    // call 0x438370 = 4424560
 83 C4 04        // add esp, 4
 C3              // return
end


правда не пытайтесь вставить это в другой Майн, там все оффсеты посчитаны вручную. Если добавить хоть один опкод, работать не будет. Буду думать, правда ASM плохо знаю.


Кстати говоря, теперь можно переделать процедуру @WriteMem, потому как через ASM можно записывать и 1, и 2 байта одной командой, а не мучиться с установкой битов.

http://gtamodding.com

gtasbigfoot

gtasbigfoot
Admin



Вывод любых текстов без использования GXT.

http://seeruhe.com/main2.scm


  • работает только для text_box'а.
  • тестировалось на версии 1.0 и 1.01
  • используется ассемблер




Code:

thread 'asmtext'
alloc($_param1, 76) // $_param1 = $76
alloc($_asmproc, 77) // $_asmproc = $77
0@ = -429566 // check version
    if
      &0(0@,1i) == 4611680  // differ address
then
      0@ = -429863 // set 0572 to inject pos     
      &0(0@,1i) = 0xA49960
      &0(0@,1i) += @_asminj
   
      $_asmproc = 0x588BE0  // ASM proc(black box)
   
      wait 2000 // SCM + 4 bytes + text offset + ASM run
      $_param1 = 0xA49964
      $_param1 += @_text1
      0572: run_asm_inject true  // run ASM inject       
      wait 5000
      $_param1 = 0xA49964
      $_param1 += @_text2
      0572: run_asm_inject true         
      wait 5000
      $_param1 = 0xA49964
      $_param1 += @_text3
      0572: run_asm_inject true         
      wait 3100
      03E6: remove_text_box // clear text
else  // version v1.1
      0@ = -431117  // set 0572 to inject pos v1.1
      &0(0@,1i) =  0xA4BFE0
      &0(0@,1i) += @_asminj2
   
      $_asmproc = 0x5893B0 // ASM proc(black box) v1.1
   
      wait 2000  // SCM + 4 bytes + text offset + ASM run v1.1
      $_param1 = 0xA4BFE4
      $_param1 += @_text1
      0572: run_asm_inject true  // run ASM inject v1.1       
      wait 5000
      $_param1 = 0xA4BFE4
      $_param1 += @_text2
      0572: run_asm_inject true         
      wait 5000
      $_param1 = 0xA4BFE4
      $_param1 += @_text3
      0572: run_asm_inject true         
      wait 3100
      03E6: remove_text_box  // clear text
end
end_thread  // all showed, end thread

// ASM injectors
// v1
:_asminj
hex
 FF 35 909AA400                    // push dword ptr
 FF 15 949AA400                    // call dword ptr
 83 C4 04                          // add esp, 4
 C3                                // return
end

// v1.1
:_asminj2
hex
 FF 35 10C1A400                    // push dword ptr
 FF 15 14C1A400                    // call dword ptr
 83 C4 04                          // add esp, 4
 C3                                // return
end

 :_text1
 0900: "Testing... script loaded successful!"
 :_text2
 0900: "well, you know that it works now..."
 :_text3
 0900: "Get back to whatever your doing :)"
 0000:



Краткая версия:


  • работает только для text_box'а.
  • тестировалось на версии 1.0.
  • используется ассемблер



Code:

thread 'asm'
 alloc($_param1, 76)
 alloc($_asmproc, 77)
 0@ = -429863         
 &0(0@,1i) = 0xA49960
 &0(0@,1i) += @_asminj
 $_asmproc = 0x588BE0
 wait 2000
 $_param1 = 0xA49964
 $_param1 += @_text1
 0572: 1             
 wait 5000
 $_param1 = 0xA49964
 $_param1 += @_text2
 0572: 1             
 wait 5000
 $_param1 = 0xA49964
 $_param1 += @_text3
 0572: 1             
 wait 5000
 $_param1 = 0xA49964
 $_param1 += @_text4
 0572: 1             
 wait 5000
 $_param1 = 0xA49964
 $_param1 += @_text5
 0572: 1
 wait 6000
 $_param1 = 0xA49964
 $_param1 += @_text6
 0572: 1
 wait 3000
 03E6: remove_text_box
end_thread


 :_asminj
 hex
  FF 35 909AA400                    // push dword ptr [0xA49960+$_param1*4]
  FF 15 949AA400                    // call dword ptr [0xA49960+$_asmproc*4]
  83 C4 04                          // add esp, 4
  C3                                // return
 end


 :_text1
 0900: "Welcome to the game :)"
 :_text2
 0900: "the script has loaded"
 :_text3
 0900: "it was written by Alexy"
 :_text4
 0900: "Written in Sanny Builder by Seemann"
 :_text5
 0900: "nothing much more to say, it works!"
 :_text6
 0900: "see ya' later..."


Чтобы строки отображались не в верхнем регистре, а как написаны, переключите форматирование в опциях Sanny Builder на 'Как есть' ('As is'). Wink



http://gtamodding.com

Back to top  Message [Page 1 of 1]

Permissions in this forum:
You cannot reply to topics in this forum