Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25

Технология поиска передаваемых значений и тип возвращаемого значения функций

15.08.2012, 13:57. Показов 2492. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я не знаю в правильный ли раздел я создал этот пост, но вопрос в следующем: у меня есть dll и программа, которая использует эту библиотеку. Загрузив в Ida я получил список всех функций в dll. Но параметры, которые принимают эти функции таким образом не получить (я это знаю), и тип возвращаемого значения - тоже . Мне нужно понять, какая технология поиска передаваемых значений (параметров) и тип возвращаемого значения функций.
Поверхностно я понимаю концепцию, но как такое реализовать - даже не представляю Ребята, помогите, пожалуйста! Если можете - скиньте специфическую литературу по этому процессу, если можно (было бы очень классно) - простенький пример (классно было бы что бы на примере дизассембелеров ida или ollydbg) или ресурс, где подробно описывается это занятие. Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.08.2012, 13:57
Ответы с готовыми решениями:

Можно ли при декларации API функций менять тип возвращаемого значения?
Всем здравствуйте. Часто при объявлении API функций возвращаемое значение Boolean меняют на Integer. Declare Function SetCommState Lib...

Тип возвращаемого значения
Здравствуйте! Подскажите, пожалуйста, почему при нахождении арифметического выражения, функция main должна возвращать значение типа int,...

Тип возвращаемого значения
Каким образом выбрать данные из DataTable, чтобы выборка представляла строку данных...явное определение IEnumerable<DataRow> не...

15
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
15.08.2012, 15:23
Кратко,параметры в функции передаються через стек.
В OllyDbg прекрасно видно,как перед вызовом заполняеться стек с передаваемыми параметрами.


Assembler
1
2
3
4
5
00401061   PUSH 0
00401063   PUSH 3.00403010                          ; |Title = "MAX.FIBONACCI = "
00401068   PUSH 3.0040302A                          ; |Text = ""
0040106D   PUSH 0                                   ; |hOwner = NULL
0040106F   CALL DWORD PTR DS:[<&user32.MessageBoxA>>; \MessageBoxA
Возвращают обычно функции через регистр eax,или если функции был передан адрес,то функция может передать значение по адресу.
К примеру WriteFile возвращает число записанных байт по адресу переданному в стек.
1
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25
15.08.2012, 15:49  [ТС]
Цитата Сообщение от Thread Посмотреть сообщение
Кратко,параметры в функции передаються через стек.
В OllyDbg прекрасно видно,как перед вызовом заполняеться стек с передаваемыми параметрами.


Assembler
1
2
3
4
5
00401061   PUSH 0
00401063   PUSH 3.00403010                          ; |Title = "MAX.FIBONACCI = "
00401068   PUSH 3.0040302A                          ; |Text = ""
0040106D   PUSH 0                                   ; |hOwner = NULL
0040106F   CALL DWORD PTR DS:[<&user32.MessageBoxA>>; \MessageBoxA
Возвращают обычно функции через регистр eax,или если функции был передан адрес,то функция может передать значение по адресу.
К примеру WriteFile возвращает число записанных байт по адресу переданному в стек.
Спасибо за скорый ответ. Ну а тип возвращаемого значения можно оценить исходя от дампа по указанном в EAX значении?
0
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
15.08.2012, 17:01
Тут надо в самой функции ковыряться.Возвращаться может что угодно,результат вычисления,адрес,код ошибки и т.д.
Смотри обращания к dll через программу,может что проясниться.

Ищи статьи и книги К.Касперского.к примеру Искусство дизассемблирования.
p.s.У самого нет времени добраться до неё,мне достаточно и того что знаю.
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25
15.08.2012, 17:10  [ТС]
Цитата Сообщение от Thread Посмотреть сообщение
Тут надо в самой функции ковыряться.Возвращаться может что угодно,результат вычисления,адрес,код ошибки и т.д.
Смотри обращания к dll через программу,может что проясниться.

Ищи статьи и книги К.Касперского.к примеру Искусство дизассемблирования.
p.s.У самого нет времени добраться до неё,мне достаточно и того что знаю.
Ок, понял! только что получилось простейшую функцию описать А если у нас описывается процедура, то (в идеальном случае) на выходе мы имеем адрес памяти, который мы передавали на входе?
0
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
15.08.2012, 17:58
Цитата Сообщение от Drayvhard Посмотреть сообщение
А если у нас описывается процедура, то (в идеальном случае) на выходе мы имеем адрес памяти, который мы передавали на входе?
Процедура по своему определению ничего не передает назад.После вызова (call) в стек сохраняеться адрес возврата(точнее сохраняеться регистр EIP).
1
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25
16.08.2012, 11:30  [ТС]
Цитата Сообщение от Thread Посмотреть сообщение
Процедура по своему определению ничего не передает назад.После вызова (call) в стек сохраняеться адрес возврата(точнее сохраняеться регистр EIP).
Спасибо!
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.08.2012, 12:51
Thread, а смысл ничего не передавать назад? процедура возвращает результат:
1) либо в переменных, адреса которых ей передали при входе в процедуру
2) либо в регистре ЕАХ если результат целочисленный (реже могут использоваться пара регистров, например, EDX и ЕАХ)
3) если результат вещественное число, то он возвращается на вершине стека сопроцессора
4) если возникла ошибочная ситуация, тогда в ЕАХ может быть передан код ошибки
0
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
16.08.2012, 14:10
Mikl___ ,солидарен.
В ассемблере грань между понятиями функциями и процедурами размазаны.
Человек ведь задал вопрос именно в этом ключе.

Как правило процедура только выполняет набор действий без возврата результата.К примеру выводить выборочно сообщения MessageBox в соответствии с переданным параметром.Возвращать что-то нет обходимости.
А функция по определению должна обязательно вернуть результат своей работы.
0
16.08.2012, 14:19

Не по теме:

Thread, но и MessageBox возвращает код нажатой клавиши, хотя, да, я не вижу разницы между процедурой и функцией

0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25
16.08.2012, 14:36  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение

Не по теме:

Thread, но и MessageBox возвращает код нажатой клавиши, хотя, да, я не вижу разницы между процедурой и функцией

ну тогда в асме нет разницы между процедурой и функцией. Может идентифицировать можно их через прогонку псевдокода, например в ида про?
0
239 / 236 / 43
Регистрация: 16.03.2011
Сообщений: 750
16.08.2012, 19:32
По ollydbg есть туториалы Рикардо Нарваха рекомендую.
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.08.2012, 21:26
Drayvhard, реверсинг.нет краклаб.ру
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
17.08.2012, 04:43
Цитата Сообщение от Drayvhard Посмотреть сообщение
Мне нужно понять, какая технология поиска передаваемых значений (параметров) и тип возвращаемого значения функций.
Drayvhard, ищи в сети книгу Криса Касперски "Фундаментальные основы хакерства". Там специально рассмотрены вопросы идентификации структур языков высокого уровня:
идентификация функций
идентификация стартовых функций
идентификация виртуальных функций
идентификация конструктора и деструктора
идентификация объектов, структур и массивов
идентификация аргумента this
идентификация операторов new и delete
идентификация библиотечных функций
идентификация аргументов функций
идентификация значения, возвращаемого функцией
идентификация локальных стековых переменных
идентификация регистровых и временных переменных
идентификация глобальных переменных
идентификация констант и смещений
идентификация литералов и строк
идентификация условных операторов if-then-else
идентификация операторов switch-case-break
идентификация циклов
идентификация математических операторов

Цитата Сообщение от Drayvhard Посмотреть сообщение
ну тогда в асме нет разницы между процедурой и функцией
Золотые слова, но только после дизасемблирования программы ты можешь увидеть только ассемблерную реализацию функций и процедур, а разницы между ними, как ты сам догадался, в ассемблере нет
1
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 25
17.08.2012, 10:52  [ТС]
r36, как раз по этих курсах и начал изучать процесс реверсинга . Конечно ещё не все уроки изучил, но очень доступно и интересно для новичка... то есть мне=)


Charles Kludge, про краклаб знал, про реверсинг - нет. Спасибо большое!

Mikl___, как раз то, что нужно! Спасибо! До этого я использовал для идентификации структур Ida Pro и его Pseudocode, очень помогает идентифицировать структуры, процедуру/функцию, но вот с типами аргументов не все так просто.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.08.2012, 11:45
Drayvhard, сходите на сайт Francesco Vianello aka Fravia
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2012, 11:45
Помогаю со студенческими работами здесь

Тип возвращаемого значения
Здравствуйте, вопрос может тупой, но почему в данном конкретном случае функция convert всегда возвращает целое значение, без знаков после...

Тип возвращаемого значения
Доброе время суток! Возникла необходимость написать программу на С++. Но я в языке ,если честно,не сильна. Использовала функции в...

Тип возвращаемого значения
Добрый день! #include &lt;stdio.h&gt; int main() { unsigned long n; printf(&quot;n = &quot;); scanf(&quot;%u&quot;,...

Тип возвращаемого значения
public class Solution { public static void main(String args) throws Exception { System.out.println(Matrix.NEO); ...

Тип возвращаемого значения функции
есть класс point. в другом классе есть член функция point GetUpperLeft() { return itsUpperLeft; } эта член-функция исходя из типа...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru