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

GetTempFileName получает не те аргументы

12.08.2016, 17:27. Показов 714. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу на masm32, нужно использовать функцию GetTempFileName с параметрами, описанными здесь. Первый параметр задает директорию, где создается временный файл. Если указана точка, файл создается в директории запущенного процесса. Префикс - короткая строка с нулем на конце. У меня в коде такие объявления:

config.inc:
Assembler
1
2
3
4
.data
 
tmpdir      db ".", 0
tmpprefix       db "jn", 0
main.asm
Assembler
1
2
3
.data?
    selfname        db MAX_PATH dup (?)
    currname        db MAX_PATH dup (?)
Функция вызывается так: invoke GetTempFileName, offset tmpdir, offset tmpprefix, FALSE, offset currname, и в этом месте программа виснет. Олли дебагер показывает, что вместо строк "." и "jn" передаются почему-то части имени исполняемого файла, а ошибка показана ERROR_DIRECTORY или как-то так. В чем тут проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2016, 17:27
Ответы с готовыми решениями:

Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число
Короче, вот бы всё норм. Хочу соединять, но он мне выдаёт ошибку, когда использую strcat. Не могу...

Транслируются ли аргументы функции CoCreateInstance в аргументы функции DllGetClassObject?
НУ то есть я думаю должно быть понятно, о чём речь. В клиенте вызывается функция: ...

Аргументы функции: что значит "большие" и "небольшие" аргументы?
Здравствуйте! Всем доброго дня! Растолкуйте пожалуйста! Что значит большие и небольшие?

Не получает ip по wi-fi
Добрый день товарищи, столкнулся с проблемой, не 2 ноута не могут получить ip адрес при подключении...

4
593 / 390 / 70
Регистрация: 29.03.2013
Сообщений: 813
12.08.2016, 17:50 2
Invoke Virtual, выложи свой код целиком. Это должно ускорить помощь.
0
Заблокирован
12.08.2016, 17:53  [ТС] 3
main.asm:
Assembler
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
.386
.model flat, stdcall
option casemap:none
 
include windows.inc
include kernel32.inc
include shell32.inc
include config.inc
include file.inc
includelib kernel32.lib
includelib shell32.lib
 
 
.data?
    selfname        db MAX_PATH dup (?)
    currname        db MAX_PATH dup (?)
.data
    td db ".",0
    tp db "jn",0
 
.code
 
Main PROC
    invoke GetModuleFileName, NULL, offset szModulePath, 100h
    invoke CreateFile, offset szModulePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0
    cmp eax, INVALID_HANDLE_VALUE
    jz EXIT
    mov hThisModule, eax        ; Save handle for opened file
    
    invoke SetFilePointer, hThisModule, LdrSize, 0, FILE_BEGIN
    
    mov ecx, nFilesJoined
    mov esi, offset nFileSizes
    EXTRACT_LOOP:
        push ecx
        invoke GetTempFileName, offset td, offset tp, FALSE, offset currname
        
        invoke WriteFunc, addr currname, dword ptr [esi]
        add esi, 4
        
        pop ecx
    loop EXTRACT_LOOP
        
        ; Close loader handle
        invoke  CloseHandle, hThisModule
 
EXIT:                      
    push 0
    call ExitProcess
Main ENDP
 
end Main
file.inc:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.code
 
WriteFunc PROC filename : DWORD, filesize : DWORD
    local hMem     : DWORD
    local hFile    : DWORD
    local nBytes   : DWORD
    
    invoke CreateFile, filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0
    mov hFile, eax
    
    invoke GlobalAlloc, GMEM_FIXED, filesize
    mov hMem, eax
    
    invoke ReadFile, hThisModule, hMem, filesize, addr nBytes, 0
    invoke WriteFile, hFile, hMem, filesize, addr nBytes, 0
    
    invoke CloseHandle, hFile
    invoke GlobalFree, hMem
WriteFunc ENDP
config.inc:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.data
 
szFileName      dw 100h
szCmdLine       dw 100h
szModulePath    dw 100h
    
hThisModule     dd 0
hNewFile        dd 0
hAllocMem       dd 0
nBytesRead      dd 0
    
LdrSize         dd 2560
nFilesJoined    dd 1
nFileSizes      dd 29696
 
tmpdir          db ".", 0
tmpprefix       db "jn", 0
0
593 / 390 / 70
Регистрация: 29.03.2013
Сообщений: 813
12.08.2016, 19:27 4
Invoke Virtual, ошибка в вызове GetModuleFileName: szModulePath - должен быть буфер для приёма zero-terminated строки, а у тебя
Цитата Сообщение от Invoke Virtual Посмотреть сообщение
szModulePath dw 100h
Дальше пока не смотрел, но результат выполнения этой функции перезаписывает твои переменные td и tp.
Видимо должно быть что-то вроде:
Assembler
1
szModulePath    db MAX_PATH dup(?)
У подпрограммы WriteFunc отсутствует ret.
1
Заблокирован
12.08.2016, 19:34  [ТС] 5
Помогло, спасибо. Забыл как писать на асме.
0
12.08.2016, 19:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2016, 19:34
Помогаю со студенческими работами здесь

Не получает IP
Короче админы I need help!!! Ситуация такова, у меня стоит винда серв 2003, на ней контроллер...

Не получает ip по dhcp.
Задача такая, офис, wi-fi сетка, на всех компьютерах стояли одинаковые настройки. все работало. ...

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

Аргументы в after
Всем привет! В Python почти ничего не знаю, пишу на php, но понадобилось мне в одном скрипте на...


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

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