Going to public double get_hp() offset address contains the following instructions: "LDR" then "RET", not "PUSH".
Do I have to look for another offset address? Also, I don't think PUSH is common for ARM64, but I may be wrong. I do see a lot of STP (store pair) and LDP (load pair) when scrolling through memory, but not PUSH instruction. I'm not sure how to navigate to the 'start of the function' like you've mentioned, it would be nice if you can tell me what I should look for when inspecting the dump that contains many offset addresses, which is something like:
// [Address(RVA = "0x1CC4FD4", Offset = "0x1CC4FD4", VA = "0x1CC4FD4")]
// [Attribute(Name = "IteratorStateMachineAttribute", RVA = "0xF3BC10", Offset = "0xF3BC10")]
// [Attribute(Name = "ObserverDelegateAttribute", RVA = "0xF3BC10", Offset = "0xF3BC10")]
public IEnumerator HPChanged(double newHP, long order)
// [Address(RVA = "0x1D4A118", Offset = "0x1D4A118", VA = "0x1D4A118")]
public void ApplyAllHPChange(double, [Optional] List<>, [Optional] EnemySkill, [Optional] BattleEnemy)
// [Token(Token = "0x5040822")]
// [Address(RVA = "0x1F57230", Offset = "0x1F57230", VA = "0x1F57230")]
public void SetHP(double newMaxHP, double newCurrentHP, bool immediate)
// [Token(Token = "0x504061F")]
// [Address(RVA = "0x1EBCBFC", Offset = "0x1EBCBFC", VA = "0x1EBCBFC")]
public void SetAllHP(double newHP)
I agree, when looking for offset addresses I found "CheatViolation" public enum which contains many enum constant values like Damage, EnemyHealthChange etc... I'll come to this later, most important part is that I understand how to patch memory at runtime.
I want to be able to have control over health, just to learn about memory patching. The process is more important than the outcome.