Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NASM ret указатель на массив из указателей 
V
    Опции темы
sevoan
Дата 20.8.2013, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.1.2011

Репутация: нет
Всего: нет



Почему нельзя сделать вот так 
NASM
Код

section .data
    global getArray
section  .bss
    ar resd 2
section .text
getArray:
    mov dword [ar], "one"
    mov dword [ar+4], "two"
    lea eax, [ar]
    ret



а потом все это получить в С вот таким способом? 

Код

#include <iostream>

using namespace std;

extern "C" char** getArray();

int main()
{
    char** in = getArray();
    cout << in[0] << endl;

    return 0;
}


При попытке распечатать 1-ю строку, выдает -1
PM MAIL   Вверх
DarthTon
Дата 20.8.2013, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: нет
Всего: 6



Ваша функция getArray создаёт не массив указателей на строки, а указатель на 2 строки идущие подряд. Так что, либо :
Код

section .data
    global _getArray

section  .bss
    ar    resd 2

section .text
_getArray:
    mov dword [ar], "one"
    mov dword [ar + 4], "two"
    lea eax, [ar]
    ret

Код

#include <iostream>

using namespace std;

extern "C" char* getArray();

int main()
{
    char* in = getArray();

    cout << in << " " << in + 4 << endl;

    return 0;
}


либо:
Код

section .data
    global _getArray

section  .bss
    arptr resd 2
    ar    resd 2

section .text
_getArray:
    lea eax, [ar]
    mov [arptr], eax
    add eax, 4
    mov [arptr + 4], eax

    mov dword [ar], "one"
    mov dword [ar + 4], "two"
    lea eax, [arptr]
    ret

Код

#include <iostream>

using namespace std;

extern "C" char** getArray();

int main()
{
    char** in = getArray();

    cout << in[0] << " " << in[1] << endl;

    return 0;
}

PM MAIL   Вверх
sevoan
Дата 20.8.2013, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 7.1.2011

Репутация: нет
Всего: нет



DarthTon, огромное спасибо, теперь понял.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.