Если падает Create Process в NDK

Автор работы: Пользователь скрыл имя, 11 Апреля 2013 в 06:34, реферат

Описание работы

Исходя из Issue 29896 для NDK обработка директив APP_SHORT_COMMANDS и LOCAL_SHORT_COMMANDS осуществляется неправильно и может приводить к падениям, если на вход функции CreateProcess подаётся >32k символов. Без данных директив всё ещё хуже.

Файлы: 1 файл

Если падает CreateProcess в NDK.docx

— 26.33 Кб (Скачать файл)

Исходя из Issue 29896 для NDK обработка директив APP_SHORT_COMMANDS и  LOCAL_SHORT_COMMANDS осуществляется неправильно и может приводить к падениям, если на вход функции CreateProcess подаётся >32k символов. Без данных директив всё ещё хуже.

Для решения проблемы с  функцией CreateProcess нужно проделать следующие шаги:

 

  1. Для собираемого проекта добавить директивы в Application.mk:

LOCAL_SHORT_COMMANDS := true

HOST_ECHO := echo

APP_SHORT_COMMANDS := true

 

  1. Внести в файл «%NDK_ROOT%/build/core/build-binary.mk» изменения, где %NDK_ROOT% - путь до NDK (например, “C:\Android\android-ndk-r8”):

В районе 300 строки:

Было

Стало

LOCAL_SHORT_COMMANDS := $(strip $(LOCAL_SHORT_COMMANDS))

 ifndef LOCAL_SHORT_COMMANDS

     LOCAL_SHORT_COMMANDS := $(strip $(NDK_APP_SHORT_COMMANDS))

 endif

ifeq ($(LOCAL_SHORT_COMMANDS)),true)

     # For static and whole static libraries

     ifneq (,$(filter STATIC_LIBRARY WHOLE_STATIC_LIBRARY,$(call module-get-class,$(LOCAL_MODULE))))

         $(call ndk_log,Building static library module '$(LOCAL_MODULE)' with linker list file)

         ar_options   := $(ar_objects)

         ar_list_file := $(LOCAL_OBJS_DIR)/archiver.list

         ar_options   := @$(call host-path,$(ar_list_file)))

         $(call generate-list-file,$(ar_options),$(ar_list_file))

 

         $(LOCAL_BUILT_MODULE): $(ar_list_file)

     endif

LOCAL_SHORT_COMMANDS := $(strip $(LOCAL_SHORT_COMMANDS))

 ifndef LOCAL_SHORT_COMMANDS

     LOCAL_SHORT_COMMANDS := $(strip $(NDK_APP_SHORT_COMMANDS))

 endif

ifeq ($(LOCAL_SHORT_COMMANDS),true)

     # For static and whole static libraries

     ifneq (,$(filter STATIC_LIBRARY WHOLE_STATIC_LIBRARY,$(call module-get-class,$(LOCAL_MODULE))))

         $(call ndk_log,Building static library module '$(LOCAL_MODULE)' with linker list file)

         ar_options   := $(ar_objects)

         ar_list_file := $(LOCAL_OBJS_DIR)/archiver.list

         ar_objects   := @$(call host-path,$(ar_list_file))

         $(call generate-list-file,$(ar_options),$(ar_list_file))

 

         $(LOCAL_BUILT_MODULE): $(ar_list_file)

     endif


 

  1. Внести в файл «%NDK_ROOT%/build/core/definitions.mk» изменения:

В районе 273 строки

Было

Стало

define generate-list-file-slice

 ifneq (,$$(word $1,$3))

@@ -273,33 273,53 @@

define generate-list-file-ev

__list_file := $2

 

.PHONY: $$(__list_file)

 

$$(__list_file): 

@ $$(host-mkdir) $$(dir $$@)

$$(hide) $$(HOST_ECHO) "$(wordlist 1,99,$1)" > $$@

$(call generate-list-file-slice,100,199,$1)

$(call generate-list-file-slice,200,299,$1)

$(call generate-list-file-slice,300,399,$1)

$(call generate-list-file-slice,400,499,$1)

$(call generate-list-file-slice,500,599,$1)

$(call generate-list-file-slice,600,699,$1)

$(call generate-list-file-slice,700,799,$1)

$(call generate-list-file-slice,800,899,$1)

$(call generate-list-file-slice,900,999,$1)

$(call generate-list-file-slice,1000,1099,$1)

$(call generate-list-file-slice,1100,1199,$1)

$(call generate-list-file-slice,1200,1299,$1)

$(call generate-list-file-slice,1300,1399,$1)

$(call generate-list-file-slice,1400,1499,$1)

$(call generate-list-file-slice,1500,1599,$1)

$(call generate-list-file-slice,1600,1699,$1)

$(call generate-list-file-slice,1700,1799,$1)

$(call generate-list-file-slice,1800,1899,$1)

$(call generate-list-file-slice,1900,1999,$1)

endef

define generate-list-file-slice

 ifneq (,$$(word $1,$3))

@@ -273,33 273,53 @@

define generate-list-file-ev

__list_file := $2

 

.PHONY: $$(__list_file)

 

$$(__list_file): 

  @$$(call host-mkdir,$$(dir $$@))

$$(hide) $$(HOST_ECHO) "$(wordlist 1,49,$1)" > $$@

$(call generate-list-file-slice,50,99,$1)

$(call generate-list-file-slice,100,149,$1)

$(call generate-list-file-slice,150,199,$1)

$(call generate-list-file-slice,200,249,$1)

$(call generate-list-file-slice,250,299,$1)

$(call generate-list-file-slice,300,349,$1)

$(call generate-list-file-slice,350,399,$1)

$(call generate-list-file-slice,400,449,$1)

$(call generate-list-file-slice,450,499,$1)

$(call generate-list-file-slice,500,549,$1)

$(call generate-list-file-slice,550,599,$1)

$(call generate-list-file-slice,600,649,$1)

$(call generate-list-file-slice,650,699,$1)

$(call generate-list-file-slice,700,749,$1)

$(call generate-list-file-slice,750,799,$1)

$(call generate-list-file-slice,800,849,$1)

$(call generate-list-file-slice,850,899,$1)

$(call generate-list-file-slice,900,949,$1)

$(call generate-list-file-slice,950,999,$1)

$(call generate-list-file-slice,1000,1049,$1)

$(call generate-list-file-slice,1050,1099,$1)

$(call generate-list-file-slice,1100,1149,$1)

$(call generate-list-file-slice,1150,1199,$1)

$(call generate-list-file-slice,1200,1249,$1)

$(call generate-list-file-slice,1250,1299,$1)

$(call generate-list-file-slice,1300,1349,$1)

$(call generate-list-file-slice,1350,1399,$1)

$(call generate-list-file-slice,1400,1449,$1)

$(call generate-list-file-slice,1450,1499,$1)

$(call generate-list-file-slice,1500,1549,$1)

$(call generate-list-file-slice,1550,1599,$1)

$(call generate-list-file-slice,1600,1649,$1)

$(call generate-list-file-slice,1650,1699,$1)

$(call generate-list-file-slice,1700,1749,$1)

$(call generate-list-file-slice,1750,1799,$1)

$(call generate-list-file-slice,1800,1849,$1)

$(call generate-list-file-slice,1850,1899,$1)

$(call generate-list-file-slice,1900,1949,$1)

$(call generate-list-file-slice,1950,1999,$1)

 endef


 

После предыдущего изменения  уже возле строки 1135:

Было

Стало

# the list of variables that *must* be defined in Application.mk files

NDK_APP_VARS_REQUIRED :=

# the list of variables that *may* be defined in Application.mk files

NDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CXXFLAGS\

                   APP_PLATFORM APP_BUILD_SCRIPT APP_ABI APP_MODULES\

                   APP_PROJECT_PATH APP_STL

# the list of variables that *must* be defined in Application.mk files

NDK_APP_VARS_REQUIRED :=

# the list of variables that *may* be defined in Application.mk files

NDK_APP_VARS_OPTIONAL := APP_OPTIM APP_CPPFLAGS APP_CFLAGS APP_CXXFLAGS\

                   APP_PLATFORM APP_BUILD_SCRIPT APP_ABI APP_MODULES\

                   APP_PROJECT_PATH APP_STL APP_SHORT_COMMANDS


 

  1. ???
  2. Profit

Информация о работе Если падает Create Process в NDK