miércoles, julio 24, 2013

Intel MPX: Extensiones de protección de memoria

(via reddit.programming) Intel acaba de presentar una serie de extensiones de protección de memoria que permita un uso más seguro de punteros en C y C++. Este conjunto de nuevas instrucciones permiten verificar si un acceso a memoria está dentro de un rango permitido protegiendo al programa de un posible buffer overflow.

Intel® MPX is designed to allow a system to run both Intel MPX enabled software and legacy software together. When executing software containing a mix of Intel MPX code and legacy code, the legacy code does not benefit from Intel MPX, but it also does not experience any change in functionality or performance. Performance of Intel MPX enabled code running on processors that do not support Intel MPX is similar to embedding NOPs in the instruction stream. Intel MPX is designed such that enabled applications can link with, call into, or be called from legacy software (libraries, etc.) while maintaining existing application binary interfaces (ABIs)

Las extensiones se pueden consultar en Intel® Architecture Instruction Set Extensions Programming Reference, concretamente en el capítulo 9 del mismo.

La idea de MPX es asociar rangos de direcciones válidas a los que pueden acceder un puntero determinado, siendo el hardware el encargado de verificar que cualquier acceso a dicho puntero está dentro del rango permito, intentando proteger al sistema de un buffer overflow. Por supuesto, hace falta compiladores y sistemas operativos que permitan usar estas nuevas extensiones. Lo que no me queda demasiado claro es que ocurre con un binario que tenga estas instrucciones y se intente ejecutar en un procesador que no tenga soporte para las mismas. De este párrafo creo entender que no debe de haber problemas en ejecutar un binario con estas instrucciones en un procesador que no soporte las mismas:

All Intel MPX instructions are NOP on processors that report CPUID.(EAX=07H, ECX=0H).EBX.MPX [bit 14] = 0, or if Intel MPX is not enabled by the operating system (see Section 9.3.3). Applications can selectively opt-in to use Intel MPX instructions.


Technorati Tags: ,

domingo, julio 21, 2013

VLC: De vuelta a la plataforma iOS

Ha vuelto a la plataforma iOS el magnífico reproductor multimedia VLC, el cual fue retirado de la misma por problemas de licencia hace dos años. Reescrito desde cero, de fuentes abiertas y licenciado de manera dual - Mozilla y GPL 2 o posterior - para ser compatible con los términos de la AppStore de Apple, permite reproducir una gran variedad de archivos multimedia. Se puede ejecutar en cualquier dispositivo que tenga la versión de iOS 5.1 en adelante. Funciona sin problemas en hardware tan antiguo como el iPhone 3GS o el iPad 1.

He tenido algún pequeño problema a la hora de reproducir algunos vídeos en el iPad 1, que se ha solucionado reiniciando la aplicación. Lo más interesante para mi - puesto que puedo reproducir vídeos en formato mp4 sin problemas con Quicktime en el iPad - es que soporta los ficheros de subtítulos en formato SubRip (srt).


Technorati Tags: ,

martes, julio 09, 2013

Desactivar IPv6 en Mac OS X desde la línea de comandos

Una de las características de Mac OS X que siempre más me ha gustado es la posibilidad de usar tanto la interfaz gráfica del sistema como diferentes utilidades la línea de comandos para la configuración y administración del mismo. Una de esas joyas desconocidas que permiten el control total de la configuración de red desde la línea de comandos es networksetup.

En Mac OS X , un servicio de red (network service) no es más que un conjunto de configuraciones de un puerto de red determinado (ethernet, wifi). Por ejemplo, se pueden tener varios servicios para el puerto ethernet en función de la localización donde se esté: casa, oficina, etc. networksetup permite la configuración y gestión de los servicios de red.

Se puede obtener la lista de servicios de red que hay en el sistema con ayuda del parámetro -listallnetworkservices

baldurgate:~ terron$networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Bluetooth DUN
Ethernet
FireWire
Wi-Fi
Bluetooth PAN
baldurgate:~ terron$

Con ayuda de la opción -getinfo se puede obtener información sobre una servicio de red determinado. Por ejemplo, para el servicio de Wi-Fi:

baldurgate:~ terron$ networksetup -getinfo Wi-Fi
DHCP Configuration
IP address: 192.168.x.x
Subnet mask: 255.255.x.x
Router: 192.168.x.x
Client ID: 
IPv6: Automatic
IPv6 IP address: none
IPv6 Router: none
Wi-Fi ID:  XX:XX:XX:XX:XX:XX 

Puede verse como está activado el soporte de IPv6 en modo automático.

Para desactivar IPv6 en cualquier servicio, se usa el parámetro -setv6off seguido del nombre del mismo:

networksetup -setv6off Ethernet
networksetup -setv6off Wi-Fi

Para que el sistema pueda realizar cambios en las bases de datos que almacenan la configuración de red, se debe estar autentificado con un usuario que tenga privilegios de admin o root. En caso de que no sea así, el sistema nos presentará un cuadro de diálogo para que se introduzcan las credenciales de un usuario con dichos privilegios.


Technorati Tags: