Изменить постоянную переменную без перестроения C ++ - PullRequest
0 голосов
/ 23 мая 2018

Я разработал проект на языке c ++ с Visual Studio 2015. Результатом моего проекта является один исполняемый файл, который должен иметь уникальный идентификатор для каждого клиента, и этот идентификатор должен быть доступен внутри кода.Простой подход состоит в том, чтобы просто определить постоянную переменную внутри кода и изменить ее значение для каждого клиента и собрать его много раз, но у меня есть сервер Linux, и я не уверен, что смогу создать его просто потому, что использовал много библиотек Winapi,Я думал, что, возможно, есть другой способ изменить или добавить какое-то постоянное значение к выводу, например, манипулирование исполняемым файлом.Например:

#include <string>
#include <iostream>
#include <Windows.h>


const std::string ID = "some unique ID";

int main() {
    std::cout << "Your ID: " << ID << std::endl;
    getchar();
    return(0);
}

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

В функции инициализации вашей программы.Создайте уникальный идентификатор на основе хэша SHA-1 текущего времени, IP-адреса, имени пользователя (то же самое).впоследствии вы можете делать все, что захотите, в этой программе (т.е. сохранять в базе данных).Будет ли это работать?

0 голосов
/ 23 мая 2018

Кажется, что есть только два подхода.Один из них - это просто создание проекта в среде Linux, который является лучшим методом, но необходимо использовать некоторые инструменты, такие как Mono XBuild ссылка здесь .Другой вариант, который может быть проще, это просто открыть двоичный файл и манипулировать определенной строкой.Как @aloMalbarez комментарий Вот простой скрипт, основанный на это .Предположим, этот пример: (я использовал 50 m с в качестве фиксированной длины для своего идентификатора)

#include <string>
#include <iostream>
#include <Windows.h>

#define ID "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"


using namespace std;

int main() {
    cout << "Your ID: " << ID << "\nlen:" << strlen(ID) <<  endl;
    getchar();
    return(0);
}

После генерации исполняемого файла используйте следующий скрипт для создания вывода.Я не парень из Linux, так что вы можете помочь мне улучшить это../build.sh input.exe output.exe "myfixedID"

#!/bin/bash
# build.sh input_file output_file <ID>


input_file=$1
output_file=$2
ID=$3


if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
  echo "wrong parameters"
  echo "build.sh input_file output_file <ID>"
  exit 1
fi

# use fixed string (ID) in the source file
# this creates 50 of "m"s
search_value=$(printf 'm%.0s' {1..50})

extension=".back"
temp_file="$input_file$extension"
tmpstring_file="./tmp"
null_termin='\0'


echo "copying the original file..."
yes | cp -rf $input_file $temp_file

address=$(strings -t d $temp_file | grep $search_value | grep -o '[0-9]*')

echo "Address:"
echo $address
if ! [[ $address =~ ^[0-9]+$ ]]; then
  echo "cannot find valid ID in executable"
  echo "removing temps"
  rm $temp_file
  exit 1
fi


# make the tempstring file
printf "$ID$null_termin" > $tmpstring_file

dd if=$tmpstring_file of=$temp_file obs=1 seek=$address conv=notrunc

echo "make new file"
yes | cp -rf $temp_file $output_file

echo "removing temps"

rm $temp_file $tmpstring_file

echo "Done!"
0 голосов
/ 23 мая 2018

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

В Visual Studio вы можете создать файл конфигурации, который передает заданные значения в вашу программу, эти значения являются переменными и могут быть изменены программно и вручную.Но, как вы заявили, вы не хотите, чтобы отдельный файл для поиска информации.

Если вы хотите отслеживать пользователей по их уникальному идентификатору, то у вас должна быть база данных, где можно регистрировать новых пользователей и выдавать уникальный идентификатор, или вы можете создать уникальный идентификатор на основе даты и времени, когдаучетная запись создается, если вы создаете уникальный исполняемый файл для каждого из них, информация о дате / времени включается в информацию о создании файла, так что вы просто используете это, так как каждый файл создается в уникальную дату / время, что будетвсегда указывайте ID.Вы можете сохранить одинаковое имя для каждого файла или включить дату / время в имя файла, например myPro20180522183231.exe, который будет представлять собой год 2018 месяц 05 день 22 час 18 минут 32 секунды 31, и это можно подтвердить с помощью информации о дате / времениданных создания файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...