Другое С/С++ Вопрос - Ответ

Z3roKwq

Известный
294
157
крашит игру, я отметил где предположительно происходит краш

help me:
void render()
{
    if (tab4.act)
    {
        float mycord[3];
        float objcord[3];
        float pos[2];
        int distance = 0;
        int model = 0;

        for (int i = 0; i < SAMP_MAX_OBJECTS; i++)
        {
            if (IsObjOnScreen(i))//крашит тут, функция отсюда: blast.hk/threads/10970/post-529339
            {
                //player cooord
                mycord[0] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[0];
                mycord[1] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[1];
                mycord[2] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[2];
                //objects coords
                objcord[0] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[0];
                objcord[1] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[1];
                objcord[2] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[2];
                ////next
                distance = floor(sqrt(pow((mycord[0] - objcord[0]), 2) + pow((mycord[1] - objcord[1]), 2) + pow((mycord[2] - objcord[2]), 2)));
                model = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->model[&i];
                SF->getGame()->convert3DCoordsToScreen(objcord[0], objcord[1], objcord[2], &pos[0], &pos[1]);//крашит тут

                if (tab2.cases && model == 1239)//крашит тут
                {
                    SF->getRender()->DrawLine(640, 900, 500, 500, 5, 0xFF00FF00);
                }
            }
        }
    }
}
 

why ega

РП игрок
Модератор
2,546
2,236
крашит игру, я отметил где предположительно происходит краш

help me:
void render()
{
    if (tab4.act)
    {
        float mycord[3];
        float objcord[3];
        float pos[2];
        int distance = 0;
        int model = 0;

        for (int i = 0; i < SAMP_MAX_OBJECTS; i++)
        {
            if (IsObjOnScreen(i))//крашит тут, функция отсюда: blast.hk/threads/10970/post-529339
            {
                //player cooord
                mycord[0] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[0];
                mycord[1] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[1];
                mycord[2] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[2];
                //objects coords
                objcord[0] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[0];
                objcord[1] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[1];
                objcord[2] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[2];
                ////next
                distance = floor(sqrt(pow((mycord[0] - objcord[0]), 2) + pow((mycord[1] - objcord[1]), 2) + pow((mycord[2] - objcord[2]), 2)));
                model = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->model[&i];
                SF->getGame()->convert3DCoordsToScreen(objcord[0], objcord[1], objcord[2], &pos[0], &pos[1]);//крашит тут

                if (tab2.cases && model == 1239)//крашит тут
                {
                    SF->getRender()->DrawLine(640, 900, 500, 500, 5, 0xFF00FF00);
                }
            }
        }
    }
}
Ты в 16, 17,18 ищешь коорды по id объекта
 
  • Нравится
Реакции: Z3roKwq

yung milonov

Известный
975
476
крашит игру, я отметил где предположительно происходит краш

help me:
void render()
{
    if (tab4.act)
    {
        float mycord[3];
        float objcord[3];
        float pos[2];
        int distance = 0;
        int model = 0;

        for (int i = 0; i < SAMP_MAX_OBJECTS; i++)
        {
            if (IsObjOnScreen(i))//крашит тут, функция отсюда: blast.hk/threads/10970/post-529339
            {
                //player cooord
                mycord[0] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[0];
                mycord[1] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[1];
                mycord[2] = SF->getSAMP()->getPlayers()->remotePlayerInfo[i]->data->onFootPos[2];
                //objects coords
                objcord[0] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[0];
                objcord[1] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[1];
                objcord[2] = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->position[2];
                ////next
                distance = floor(sqrt(pow((mycord[0] - objcord[0]), 2) + pow((mycord[1] - objcord[1]), 2) + pow((mycord[2] - objcord[2]), 2)));
                model = SF->getSAMP()->getNetGame()->pools->objectPool->object[i]->model[&i];
                SF->getGame()->convert3DCoordsToScreen(objcord[0], objcord[1], objcord[2], &pos[0], &pos[1]);//крашит тут

                if (tab2.cases && model == 1239)//крашит тут
                {
                    SF->getRender()->DrawLine(640, 900, 500, 500, 5, 0xFF00FF00);
                }
            }
        }
    }
}
тут сурс есть
 
  • Нравится
Реакции: Z3roKwq

p1cador

cerf
Проверенный
220
359
Есть код:
C++:
#include <iostream>

char __attribute__ ((section (".TST"))) buffer[0x20];

int main(int argc, char* argv[])
{
    std::cout << "0x" << std::hex << (void*)buffer << std::endl;
    return 0;
}

Получившийся в результате компиляции(g++) и линковки виндовый x86 экзешник работает корректно.

Если же добавляю линковщику флаг --section-start,.TST=0x500000, собравшийся .exe не запускается:

1664135687341.png


Сравнил оба .exe файла, никаких серьезных различий не нашел. Например, вот отличия между IMAGE_OPTIONAL_HEADER32 рабочего .exe файла (слева) и нерабочего (справа). Отличия подчеркнул красным для удобства
1664136039415.png


Тут все справедливо: все адреса после 0x4000 смещены, потому что по адресу 0x4000 располагается .TST секция

Также вот секционные заголовки рабочего (слева) и нерабочего (справа) экзешников:
1664136441820.png



Тоже все выглядит нормально.

У меня было только одно предположение - в выравнивании. Явно укзаал линковщику выравнивание кратное 512 --section-alignment=0x1000 --file-alignment=0x1000. Не помогло.
Куда копать, в чем проблема?
 

Z3roKwq

Известный
294
157
не выводит русский текст

meow:
stFontInfo* TFONT; //перед маинлупом

TFONT = SF->getRender()->CreateNewFont("Tahoma", 10, FCR_BORDER); //в маинлупе

TFONT->Print("тест", D3DCOLOR_ARGB( 255, 255, 255, 255 ), scr.x, scr.y, false ); //в каллбеке презент

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

перекур

Участник
12
34
Есть код:
C++:
#include <iostream>

char __attribute__ ((section (".TST"))) buffer[0x20];

int main(int argc, char* argv[])
{
    std::cout << "0x" << std::hex << (void*)buffer << std::endl;
    return 0;
}

Получившийся в результате компиляции(g++) и линковки виндовый x86 экзешник работает корректно.

Если же добавляю линковщику флаг --section-start,.TST=0x500000, собравшийся .exe не запускается:

Посмотреть вложение 170497

Сравнил оба .exe файла, никаких серьезных различий не нашел. Например, вот отличия между IMAGE_OPTIONAL_HEADER32 рабочего .exe файла (слева) и нерабочего (справа). Отличия подчеркнул красным для удобства
Посмотреть вложение 170498

Тут все справедливо: все адреса после 0x4000 смещены, потому что по адресу 0x4000 располагается .TST секция

Также вот секционные заголовки рабочего (слева) и нерабочего (справа) экзешников:
Посмотреть вложение 170500


Тоже все выглядит нормально.

У меня было только одно предположение - в выравнивании. Явно укзаал линковщику выравнивание кратное 512 --section-alignment=0x1000 --file-alignment=0x1000. Не помогло.
Куда копать, в чем проблема?
У меня всё работает, возможно у винды есть какие-то особые требования к секциям, либо баги линкера под винду
asd_000.jpg
asd.jpg
, п
 
  • Нравится
Реакции: legendabrn и p1cador

p1cador

cerf
Проверенный
220
359
@перекур спасибо,что затестил, но я даже не сомневался, что эта проблема будет только на винде
 

Sadow

Известный
1,439
587
Есть ли разница в
C++:
#include <iostream>
using namespace std;

void main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
От
C++:
#include <iostream>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
 

EclipsedFlow

Известный
Проверенный
1,040
464
Есть ли разница в
C++:
#include <iostream>
using namespace std;

void main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
От
C++:
#include <iostream>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
Конечно есть, main всегда должна возвращать значение
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
Есть ли разница в
C++:
#include <iostream>
using namespace std;

void main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
От
C++:
#include <iostream>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Hello World!" << endl;
}
Первый пример кода - не код на языке C++
 
  • Нравится
Реакции: EclipsedFlow и Sadow