Ошибка сегментации в коде сборки для вызова root [duplicate]

Я играл с этим, так как мне нравятся мои перечисления. =)

Используя Object.defineProperty Я думаю, что я придумал несколько жизнеспособное решение.

Вот jsfiddle: http://jsfiddle.net/ZV4A6/

Используя этот метод, вы должны (теоретически) иметь возможность вызывать и определять значения перечисления для любого объекта, не затрагивая другие атрибуты этого объекта.

Object.defineProperty(Object.prototype,'Enum', {
    value: function() {
        for(i in arguments) {
            Object.defineProperty(this,arguments[i], {
                value:parseInt(i),
                writable:false,
                enumerable:true,
                configurable:true
            });
        }
        return this;
    },
    writable:false,
    enumerable:false,
    configurable:false
}); 

Из-за атрибута writable:false это должно сделать его безопасным.

Итак, вы должны иметь возможность создать пользовательский объект, а затем называть его Enum(). Значения, назначенные значения, начинаются с 0 и приращения для каждого элемента.

var EnumColors={};
EnumColors.Enum('RED','BLUE','GREEN','YELLOW');
EnumColors.RED;    // == 0
EnumColors.BLUE;   // == 1
EnumColors.GREEN;  // == 2
EnumColors.YELLOW; // == 3

2
задан Jester 8 December 2012 в 15:33
поделиться

1 ответ

Как сказал Бо в своем комментарии, раздел .text доступен только для чтения по текущим системам. Чтобы этот код работал, вы должны сделать его доступным для записи. Например, вы можете использовать директиву в исходном файле:

.section wtext, "awx", @progbits

Эквивалентная nasm директива:

section wtext exec write

В качестве альтернативы, также можно передать -N переключиться на компоновщик.

Обратите внимание, что такой код оболочки обычно предназначен для выполнения стека, что является еще одной вещью, которая обычно отключается в текущих операционных системах. Если вы когда-нибудь захотите попробовать это в стеке, вам может понадобиться опция -z execstack компоновщика.

4
ответ дан Jester 27 August 2018 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: