С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 06.07.2018
Сообщений: 4
1

Перевод строкового hex в числовой hex

27.10.2020, 18:28. Показов 4988. Ответов 5

Author24 — интернет-сервис помощи студентам
У меня имеется переменная target_ptr:
Python
1
target_ptr= "0x13FFE1000"
Ее мне необходимо переместить в переменную target_ptr_addr таким вот образом:
Python
1
target_ptr_addr = ctypes.c_ulonglong(target_ptr)
Переменная target_ptr - всегда на входе будет иметь строковый тип, в котором будет находится hex число, которое я использую для поиска адреса.
И за такое я получаю закономерную ошибку:
Код
TypeError: an integer is required (got type str)
Как мне можно обойти эту проблему? Ведь если просто задать переменную как ниже, то проблем не будет и все будет работать
Python
1
2
target_ptr == 0x13FFE1000 #Хочу получать
target_ptr == "0x13FFE1000" #Получаю
Однако у меня пока нет способа получать переменную target_ptr в числовом формате, я всегда буду вытаскивать str тип из программы, мне просто необходимо перевести str в int с сохранением hex структуры, а именно ниже на отдельном примере:
Python
1
2
3
4
5
6
7
8
target = "0x13FFE1000"
target_ptr = "{:x}".format(int(target,16))
target_ptr2 = int(target,16)
target_ptr3 = hex(int(target,16))
#Ожидаю получить int 0x13FFE1000
#1 получаю str "0x13FFE1000"
#2 получаю int 5368582144
#3 получаю str "0x13FFE1000"
Как мне возможно сделать из hex str числовой hex

Я совсем недавно начал все это изучать и сейчас столкнулся с такой вот проблемой, прошу помочь, гугл не спасает

Полный код, если нужно, для понимания сути:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import time
from ctypes import *
from ctypes.wintypes import *
from subprocess import check_output
 
last_time = time.time()
OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle
 
PROCESS_ALL_ACCESS = 0x1F0FFF
PROCESS_VM_READ = 0x0010
process_name = "DarkSoulsIII.exe"
def get_pid():
    line = check_output('tasklist /fi "Imagename eq DarkSoulsIII.exe"').split()
    return int(line[14])
pid = get_pid()
 
target_ptr_addr = 0x13FFE1000
target_ptr_addr = ctypes.c_ulonglong(target_ptr_addr)
 
bufferSize = 32
target_ptr = ctypes.create_string_buffer(bufferSize)
bytesRead = c_ulonglong(bufferSize)
processHandle = OpenProcess(PROCESS_VM_READ, False, pid)
 
if ReadProcessMemory(processHandle, target_ptr_addr, target_ptr, bufferSize, byref(bytesRead)):
    target_ptr = str(hex(target_ptr.raw[5]))+str(hex(target_ptr.raw[4])).replace('0x', '')+str(hex(target_ptr.raw[3])).replace('0x', '')+str(hex(target_ptr.raw[2])).replace('0x', '')+str(hex(target_ptr.raw[1])).replace('0x', '')+str(hex(target_ptr.raw[0])).replace('0x', '')
print("target_ptr =", target_ptr)
 
print("Time: {}".format(time.time() - last_time))
CloseHandle(processHandle)
С помощью этого кода я получаю переменную target_ptr = "0x7ff44cb5e390", которая хранит в себе адрес для следующего запроса, но адрес этот в строковом типе, а мне нужен int в 16-ричной системе счисления, а именно hex вида.

Возможно если есть какие-то библиотеки, с помощью которых можно прогуливаться по памяти приложений и делать смещения по offset-ам, как это я хочу реализовать, то пожалуйста напишите мне их.

Вообще если вдруг так же нужна информация, зачем я копаюсь в памяти игры, то отвечу сразу:
Мне это необходимо для получения из нее переменных(не для читерства) для нейронной сети.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2020, 18:28
Ответы с готовыми решениями:

Перевод из RGB формата в HEX Python
Подскажите, пожалуйста, как можно преобразовать следующие данные... Вот есть код, который получает...

Задача 3: перевод числа записанное в HEX с учетом знака в BIN
3) Напишите программу, которая переводит число (возможно, отрицательное), записанное в...

Задача 4: перевод числа записанное в HEX с учетом знака в DEC
4) Напишите программу, которая переводит число (возможно, отрицательное), записанное в...

Если HEX одного файла заменить на HEX другого, то изменится ли файл и будет ли работоспособным?
Привет, если два файла a.exe(калькулятор) и b.exe(выводит строку "Hello World") Если открыть файл...

5
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
27.10.2020, 18:44 2
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Цитата Сообщение от Djokey049 Посмотреть сообщение
а мне нужен int в 16-ричной системе счисления, а именно hex вида.
- тебе нужен int.

Python
1
2
3
4
5
6
7
8
9
def h2i(h):
    hd="0123456789ABCDEF"
    acc=0
    for a in h[2:]:
        k=hd.find(a.upper())
        acc=acc*16+k
    return acc    
        
print(h2i("0xff"))
1
5426 / 2779 / 561
Регистрация: 07.11.2019
Сообщений: 4,555
27.10.2020, 18:49 3
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Catstail, можно же так:
Python
1
print(int('0xff', 16))
2
1 / 1 / 0
Регистрация: 06.07.2018
Сообщений: 4
27.10.2020, 18:54  [ТС] 4
Я был слеп, пока ты не написал про то что мне нужен int, спасибо, действительно int как адрес тоже подходит и работает точно так же)
1
Эксперт Python
5435 / 3858 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
27.10.2020, 19:01 5
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Цитата Сообщение от Djokey049 Посмотреть сообщение
int как адрес тоже подходит
Вообще-то он всегда и был интом.
int это тип данных. hex это всего лишь представление числа в определенном формате.
А hex-литерал (без скобок) 0x13FFE1000 транслируется питоном в обычный int десятичного вида.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
27.10.2020, 19:15 6
u235, я подозревал, что есть стандартная функция (не может не быть!), но... лень было лезть в справочник!
0
27.10.2020, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2020, 19:15
Помогаю со студенческими работами здесь

Прошивка микроконтроллера Hex файлом или Hex загрузчик
Доброго дня, Вообщем имеется программатор USB ASP v.2.0, Хочу написать свою программу которая будет...

Как преобразовать hex в ascii (HEX редактор)
Написал: String ^in; openFileDialog1->Filter = "hex Files|*.hex"; openFileDialog1->Title =...

Вычислить формулу (hex) Rsh 7h и (hex) And 7Fh
Мне надо всёвремя считать, например, такое 11F0 Rsh 7 = 23 11F0 And 7F = 70 Чтобы на выходе...

Перевести строку char hex в hex массив
Мужики имею такую задачу есть переменная типа char котора содержит в себе строку hex....

ASCII to HEX, HEX to Binary/Assembly 8086
Люди добрые, есть проблема, надо написать программу которая получает с клавиатуры какие-нибудь...

[BMP] HEX (из HEX-редактора) в DEC
Имеется файл *.bmp (который нельзя вложить в сообщение). В самом файле есть его свойства (размер и...

Std::count << std::hex << (long) 0x0a; Как сделать, чтоб от HEX значения ноль при выводе не убирался?
сабж...( std::count &lt;&lt; std::hex &lt;&lt; (long) 0x0a; ) выводится просто a, вместо 0а, а надо чтоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru